我有这个型号:
class Occurrence(models.Model):
id = models.AutoField(primary_key=True, null=True)
reference = models.IntegerField(null=True, editable=False)
def save(self):
self.reference = self.id
super(Occurrence, self).save()
我希望隐藏参考字段,同时具有与id相同的值。如果editable=True
,此代码有效,但如果我想隐藏它,它不会更改引用的值。
我该如何解决?
答案 0 :(得分:1)
为什么不直接使用id呢?你可以通过将它作为一个属性在名称'reference'下公开它,但它不会出现在任何ModelForms中,包括管理员:
@property
def reference(self):
try:
return self.id
except AttributeError: #in case the object is not yet saved
return None
答案 1 :(得分:0)
我想对你的代码发表一些评论。首先,在保存中,它应该说引用而不是集合,而super
应该缩进save
。你忘了在super
中传递参数。它应该是这样的:
class Occurrence(models.Model):
id = models.AutoField(primary_key=True, null=True)
reference = models.IntegerField(null=True, editable=False)
def save(self):
self.reference = self.id
super(Occurrence, self).save(*args, **kwargs)
除非 editable 值,否则此功能始终有效。可编辑只适用于管理员。顺便说一句,我假设您正在谈论管理员中隐藏引用。由于id一旦保存就永远不会改变,你可以使用它的值而不是参考值。
希望这有帮助。