使用self.id填充Django中的其他字段

时间:2012-01-18 04:55:35

标签: django django-models save

我正在尝试使用主键'id'填充名为'identification'的字段。但是,正如您所知,在保存对象之前无法知道对象的“id”。因此,我固执地做到了这一点:

def save(self, *args, **kwargs):
    super(Notifications, self).save(*args, **kwargs)
    self.identification = str(self.id)

有趣的是,这可以在控制台中使用:

>>>new = Notifications.objects.create( # some fields to be filled )
>>>new.identification
'3' (# or whatever number)

但是当我转到我的模板来检索这个对象时:

{% for each in notifications %}
  Identification: {{ each.identification }}
{% endfor %}

现实袭击:

Identification: 

发生了什么事?为什么它在控制台中工作而在模板中不工作?您建议在其他领域使用自动填充字段的方法是什么?

非常感谢!

1 个答案:

答案 0 :(得分:3)

问题是您没有将更改保存到数据库中。

它在终端中工作,因为该特定模型实例(python对象 - 非常临时)具有填充的属性identification。在视图或模板中访问它时,尚未调用save()方法,因此属性/字段为空。

要使其正常工作,请在首次保存后再次致电保存。此外,仅在模型创建时设置id可能是有意义的。在大多数情况下,每次初始保存一次额外的呼叫并不是那么大。

def save(self, *args, **kwargs):
    add = not self.pk
    super(MyModel, self).save(*args, **kwargs)
    if add:
        self.identification = str(self.id)
        kwargs['force_insert'] = False # create() uses this, which causes error.
        super(MyModel, self).save(*args, **kwargs)