custom django-user object has no attribute 'has_module_perms' custom django-user object has no attribute 'has_module_perms' django django

custom django-user object has no attribute 'has_module_perms'


Your User implementation is not providing the mandatory methods to be used with the Admin module.

See https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#module-django.contrib.admin.

In your case, add the permissions mixin (PermissionsMixin), as a superclass of your model:

from django.contrib.auth.models import PermissionsMixinclass MyUser(AbstractBaseUser, PermissionsMixin):     # ...

It is described here : https://docs.djangoproject.com/en/3.0/topics/auth/customizing/#custom-users-and-permissions.

It works with Django 1.x, 2.x and 3.0.

EDIT: updated links to django version 3.0


I think your model is missing some attributes such as 'has_module_params'...Try to add the following

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


For those who are just stepping in November 2017 and after, I don't think adding or allowing your class to inherit PermissionsMixin is the way out, being that it will raise more error since you have reinvented the wheel.

I ran into the same problem this afternoon (4th Nov, 2017) having override Username with 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

So, http://127.0.0.1:8000/admin/ wasn't working and kept raising object has no attribute 'has_module_perms' error, the following is how I fixed mine:

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

I hope this helps someone.