I've created a custom user model using AbstractBaseUser. When I try to create a super user using terminal via createsuperuser command.
I get
in create_superuser
    user.is_staff = True
AttributeError: can't set attribute
Below is my code for creating custom user model.
import uuid
from django.db import models
from django.contrib.auth.models import (
 AbstractBaseUser, AbstractUser, BaseUserManager
)
class AdminUserManager(BaseUserManager):
 def create_user(self, email_id, password=None, *args, **kwargs):
  if not email_id:
   raise ValueError('User must have an Email ID')
  user = self.model(email_id=email_id)
  user.set_password(password)
  user.save(using = self._db)
  return user
 def create_staffuser(self, email_id, password, *args, **kwargs):
  user = self.create_user(
   email_id, password=password
  )
  user.is_staff = True
  user.save(using = self._db)
  return user
 
 def create_superuser(self, email_id, password, *args, **kwargs):
  user = self.create_user(
   email_id, password=password
  )
  user.is_staff = True
  user.is_superuser = True
  user.save(using = self._db)
  return user
USER_ROLE = (
  ('pilot', 'pilot'),
  ('admin', 'admin')
)
class AdminUser(AbstractBaseUser):
  user_uid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  profile_picture = models.ImageField(upload_to='user_profile_picture/', null=True, blank=True)
  user_role = models.CharField(max_length=10, choices=USER_ROLE)
  email_id = models.EmailField(verbose_name='Email ID', unique=True)
  first_name = models.CharField(max_length=100)
  last_name = models.CharField(max_length=100)
  phone_number = models.CharField(max_length=20)
  created_at = models.DateTimeField(auto_now_add=True)
  updated_at = models.DateTimeField(auto_now=True)
  is_verified = models.BooleanField(default=False)
  is_active = models.BooleanField(default=True)
  is_staff = models.BooleanField(default=False)
  is_superuser = models.BooleanField(default=False)
  USERNAME_FIELD = 'email_id'
  REQUIRED_FIELDS = ['first_name', 'last_name']
  def get_full_name(self):
   full_name = f'{self.first_name} {self.last_name}'
   return full_name
 
  def get_short_name(self):
   return self.first_name
  def __str__(self):
   return self.email_id
 
  @property
  def is_staff(self):
   return self.is_staff
  @property
  def is_superuser(self):
   return self.is_superuser
  objects = AdminUserManager()