我尝试创建一个自定义用户模型,用于向用户添加一些自定义字段.我在django 1.5中使用了基于AbstractBaseUser的新方法.除管理员面板外,一切(登录)都有效.登录管理界面时,出现以下错误:
AttributeError at /admin/
'ShopUser' object has no attribute 'is_superuser'
Run Code Online (Sandbox Code Playgroud)
这是我的模特:
from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
from django.contrib import auth
class ShopUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError("We need an e-mail here...")
user = self.model(
email = ShopUserManager.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(
email,
password = password,
)
user.is_admin = True
user.is_staff = True
user.save(using=self._db)
return user
class ShopUser(AbstractBaseUser):
email = models.EmailField(
verbose_name = 'e-mail address',
max_length = 255,
unique = True,
db_index = True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
objects = ShopUserManager()
USERNAME_FIELD = 'email'
# REQUIRED_FIELDS = ['']
def __unicode__(self):
return self.email
def has_perms(self, perm_list, obj=None):
"""
Returns True if the user has each of the specified permissions. If
object is passed, it checks if the user has all required perms for this
object.
"""
for perm in perm_list:
if not self.has_perm(perm, obj):
return False
return True
def has_module_perms(self, app_label):
"""
Returns True if the user has any permissions in the given app label.
Uses pretty much the same logic as has_perm, above.
"""
# Active superusers have all permissions.
if self.is_active and self.is_superuser:
return True
return _user_has_module_perms(self, app_label)
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?谢谢!
小智 27
您不必让您的类继承PermissionsMixin.
我有同样的问题,我通过向我的用户类添加一些必需的方法(在你的情况下是ShopUser)修复它.
class ShopUser(AbstractBaseUser):
...
def get_full_name(self):
return self.fullname
def get_short_name(self):
return self.shortname
@property
def is_superuser(self):
return self.is_admin
@property
def is_staff(self):
return self.is_admin
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return self.is_admin
Run Code Online (Sandbox Code Playgroud)
让类ShopUser继承自PermissionsMixin:
class ShopUser(AbstractBaseUser, PermissionsMixin):
Run Code Online (Sandbox Code Playgroud)
这将添加is_superuser字段,并应与管理UI很好地配合.
你的create_superuser方法应该设置user.is_superuser = True.
最后,你应该实现get_full_name并get_short_name为您的ShopUser类.
更多信息:在Django中自定义身份验证
| 归档时间: |
|
| 查看次数: |
7110 次 |
| 最近记录: |