2

是否可以在没有相应字段的情况下在 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作为另一个字段的函数提供?

4

1 回答 1

5

这是完全可能的,而且您提供的代码本身不会引起任何问题。问题只是因为您尝试在 admin 中使用该属性list_filter,而您不能这样做,因为就像任何转换为​​ db 查询的过滤一样,因此需要一个实际的 db 字段。

于 2013-05-14T09:49:25.430 回答