AbstractBaseUser' is_staff' syncdb期间省略字段

时间:2014-07-07 07:57:40

标签: django-models django-admin django-users

我决定通过扩展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之类的其他字段工作得很好,但这个特殊字段只是不会让步。

1 个答案:

答案 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