【问题标题】:django set default value of a model field to a self attributedjango 将模型字段的默认值设置为 self 属性
【发布时间】:2012-08-20 02:12:23
【问题描述】:

我有一个名为 Fattura 的模型,我想将字段“printable”的默认值设置为包含字段“numero”值的字符串。

但我有一个错误,即 link_fattura 的参数较少,但如果我添加 default=link_fattura(self) 我有一个错误,因为 self 没有定义。

我该如何解决这个问题?

class Fattura(models.Model):
        def link_fattura(self, *args, **kwargs):
                return u"http://127.0.0.1:8000/fatture/%s/" % (self.numero)
        data = models.DateField()
        numero = models.CharField("Numero", max_length=3)
        fatturaProForma = models.ForeignKey(FatturaProForma)
        printable = models.CharField("Fattura stampabile", max_length=200, default=link_fattura)
        def __unicode__(self):
                return u"%s %s" % (self.data, self.numero)
        class Meta:
                verbose_name_plural = "Fatture"
                ordering = ['data']

【问题讨论】:

    标签: django model field default-value


    【解决方案1】:

    您不能使用 default 参数来执行此操作。最好的办法是覆盖save 方法:

    def save(self, *args, **kwargs):
        if not self.id and not self.printable:
            self.printable = self.link_fattura()
        return super(Fattura, self).save(*args, **kwargs)
    

    【讨论】:

      【解决方案2】:

      对不起,我把你的问题读错了,没有 javascript 是不可能的,因为你的模型在那个阶段还没有保存。

      您可以通过执行以下操作来预测网址:

      def link_facttura(self):
          if not self.id:
              return some_url/fattura/%d/ % Fattura.objects.latest().id+1
          return u""
      

      但是一旦开始删除记录,它就很难看并且可能会导致错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多