indianwebdevil
indianwebdevil

Reputation: 5127

not able to createsuperuser in django

I am not able to createsuperuser, I am getting the following error

Django Version 3.1.1

Traceback (most recent call last):
  File "/Users/napoleon/django-app/mysite/manage.py", line 22, in <module>
    main()
  File "/Users/napoleon/django-app/mysite/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/Users/napoleon/django-app/pfs-venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/Users/napoleon/django-app/pfs-venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/napoleon/django-app/pfs-venv/lib/python3.9/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/napoleon/django-app/pfs-venv/lib/python3.9/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 79, in execute
    return super().execute(*args, **options)
  File "/Users/napoleon/django-app/pfs-venv/lib/python3.9/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/Users/napoleon/django-app/pfs-venv/lib/python3.9/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 189, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
AttributeError: 'UserManager' object has no attribute 'create_superuser'

basically its throwing AttributeError: 'UserManager' object has no attribute 'create_superuser'

I read this alsoSO-related question I don't get it exactly as conveyed there.

Custom User models mainapp/models.py

import uuid
from django.contrib.auth.models import AbstractUser, UserManager

from django.db import models

class CustomUserManager(UserManager):
    
    def create_user(self, email,date_of_birth, username,password=None,):
         if not email:
             msg = 'Users must have an email address'
             raise ValueError(msg)

         if not username:
              msg = 'This username is not valid'
              raise ValueError(msg)

        #  if not date_of_birth:
        #      msg = 'Please Verify Your DOB'
        #      raise ValueError(msg)

        #  user = self.model( email=UserManager.normalize_email(email),
        #  username=username,date_of_birth=date_of_birth )
        
         user = self.model( email=UserManager.normalize_email(email),
         username=username )
         
         user.set_password(password)
         user.save(using=self._db)
         return user

    def create_superuser(self,email,username,password,date_of_birth):
         user = self.create_user(email,password=password,username=username,date_of_birth=date_of_birth)
         user.is_admin = True
         user.is_staff = True
         user.is_superuser = True
         user.save(using=self._db)
         return user

# Custom User Model
class User(AbstractUser):

    id = models.BigAutoField(primary_key=True)
    user_uuid = models.UUIDField(default=uuid.uuid1())
    full_name = models.CharField(max_length=200,default='')

    email = models.CharField(max_length=200,default='')
    #form can have empty value blank=True, db can have empty value null=True
    email_last_verified_on = models.DateTimeField(null=True)

Settings.py

# Swapping the user model
AUTH_USER_MODEL = 'mainapp.User'

Please clarify, what am I missing ...

Upvotes: 1

Views: 234

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477190

You need to add the UserManager to the User mode:

class User(AbstractUser):
    # …
    objects = CustomUserManager()

Without specifying the manager, it will fallback to the UserManager [Django-doc], not the CustomUserManager.

Upvotes: 2

Related Questions