django将模型字段的默认值设置为self属性

时间:2012-08-24 13:45:05

标签: django model field default-value

我有一个名为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']

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

抱歉,我读错了你的问题,没有javascript就不可能,因为你的模型还没有在那个阶段保存过。

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

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

但它很丑,一旦你开始删除记录就可能导致错误