пользовательский объект django-user не имеет атрибута "имеет модуль perms"
моя пользовательская модель пользователя для входа по электронной почте:
class MyUser(AbstractBaseUser):
id = models.AutoField(primary_key=True) # AutoField?
is_superuser = models.IntegerField(default=False)
username = models.CharField(unique=True,max_length=30)
first_name = models.CharField(max_length=30, default='')
last_name = models.CharField(max_length=30, default='')
email = models.EmailField(unique=True,max_length=75)
is_staff = models.IntegerField(default=False)
is_active = models.IntegerField(default=False)
date_joined = models.DateTimeField(default=None)
# Use default usermanager
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
class Meta:
db_table = 'auth_user'
для которого я могу успешно создать суперпользователя. Однако, когда я пытаюсь войти в систему с электронной почтой и паролем, я получаю эту ошибку:
'MyUser' object has no attribute 'has_module_perms'
есть идеи, что я делаю неправильно ?
3 ответов
ваша реализация пользователя не предоставляет обязательные методы, которые будут использоваться с модулем администратора.
см https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#module-django.contrib.admin.
в вашем случае просто добавьте разрешения mixin (PermissionsMixin) в качестве суперкласса вашей модели.
from django.contrib.auth.models import PermissionsMixin
class MyUser(AbstractBaseUser, PermissionsMixin):
# ...
это описано здесь : https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#custom-users-and-permissions.
Я думаю, что в вашей модели отсутствуют некоторые атрибуты, такие как 'has_module_params'...Попробуйте добавить следующее
class MyUser(AbstractBaseUser):
...
...
def has_perm(self, perm, obj=None):
return self.is_superuser
def has_module_perms(self, app_label):
return self.is_superuser
для тех, кто просто шагает в ноябре 2017 года и после, я не думаю, что добавление или разрешение вашего класса наследовать PermissionsMixin
это выход, так как он вызовет больше ошибок, так как вы изобрели колесо.
я столкнулся с той же проблемой сегодня днем (4 ноября 2017 года), переопределив Username
С Phone Number
:
class MyUserManager(BaseUserManager):
..
..
def create_superuser(self, phone, password=None):
if password is None:
raise TypeError("provide password please")
myuser = self.model(phone=phone)
myuser.set_password(password)
myuser.is_admin = True
myuser.is_staff = True
myuser.save()
return myuser
и http://127.0.0.1:8000/admin/
не работал и продолжал поднимать object has no attribute 'has_module_perms'
ошибка, следующее, Как я исправил мой:
class MyUser(AbstractBaseUser):
..
..
def get_full_name(self):
pass
def get_short_name(self):
pass
@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
@is_staff.setter
def is_staff(self, value):
self._is_staff = value
Я надеюсь это кому-то помогает.