我决定通过扩展Django的AbstractBaseUser和PermissionsMixin类来为应用创建自定义用户模型。出于某种原因,当我运行syncdb或sqall时,我的模型上的is_staff
字段将从查询中省略。如您所知,is_staff
字段必须能够访问Admin界面。这是我的代码片段(Django 1.5.8):
from django.contrib.auth.models import ( \
AbstractBaseUser, BaseUserManager, PermissionsMixin)
#models.py snippet
class FooUser(AbstractBaseUser, PermissionsMixin):
#foo fields here...
is_active = models.BooleanField(default=False, verbose_name='account is activated')
is_staff = models.BooleanField(default=False, verbose_name='staff account')
我查看了这两个类的源代码,但它们都没有实现is_staff
字段,因此我不确定问题是什么。我使用AbstractBaseUser而不是AbstractUser(具有is_staff
字段)的唯一原因是因为我不需要或不需要我的用户模型中的名字首字段。添加is_admin
之类的其他字段工作得很好,但这个特殊字段只是不会让步。
答案 0 :(得分:1)
以下代码是遗漏的原因:
@property
def is_staff(self):
return self.is_admin
通过评论,问题得到解决。或者你也可以这样做:
#models.py snippet
class FooUser(AbstractBaseUser, PermissionsMixin):
#foo fields here...
is_active = models.BooleanField(default=False, verbose_name='account is activated')
is_admin = models.BooleanField(default=False, verbose_name='staff account')
@property
def is_staff(self):
"Is the user a member of staff?"
# Simplest possible answer: All admins are staff
return self.is_admin
完整示例:https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#a-full-example