我正在尝试使用主键'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:
发生了什么事?为什么它在控制台中工作而在模板中不工作?您建议在其他领域使用自动填充字段的方法是什么?
非常感谢!
答案 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)