Django模型中隐藏字段的默认值

时间:2010-05-06 20:08:44

标签: django django-models django-admin django-forms

我有这个型号:

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,此代码有效,但如果我想隐藏它,它不会更改引用的值。

我该如何解决?

2 个答案:

答案 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一旦保存就永远不会改变,你可以使用它的值而不是参考值。

希望这有帮助。