没有字段的Django模型属性

时间:2013-05-14 09:33:20

标签: python django

是否可以在django中设置属性(为了向后兼容),没有相应的字段?这是一个带有自定义用户模型的简单测试用例:

class CustomUser(AbstractBaseUser):
  email = models.EmailField(max_length=254, unique=True, db_index=True)
  USERNAME_FIELD = 'email'
  ...
  permissions = models.IntegerField(default=0)

  @property
  def is_staff(self):
    return self.permissions >= 2
  @is_staff.setter
  def is_staff(self, value):
    if value and not self.is_staff:
      self.permissions = 2
    if not value and self.is_staff:
      self.permissions = 1

现在,当我尝试使用默认管理界面加载此用户时,出现以下错误:'CustomUserAdmin.list_filter[0]' refers to 'is_staff' which does not refer to a Field.

有没有办法设置它,以便模型提供is_staff作为另一个字段的函数?

1 个答案:

答案 0 :(得分:5)

这是完全可能的,你给出的代码本身不会导致任何问题。问题只是因为您尝试在admin list_filter中使用该属性,而这是您无法做到的,因为任何过滤都转换为db查询,因此需要一个实际的db字段。