Я создал пользовательскую модель под названием «Администратор» для целей суперпользователя, а другую модель под названием «Клиент» для обычных пользователей.
Я намеревался разделить их на две разные таблицы, это частично сработало, но не идеально. Проблема в том, что когда я создал экземпляр для клиента, он будет автоматически добавлен в таблицу администраторов, это не то, что я хочу.
Модель администратора на сайте администратора Django
Модель клиента на сайте администратора Django
Модель администратора показана ниже:
class Administrator(PermissionsMixin, AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
join_date = models.DateField(auto_now_add=True, editable=False)
objects = AdministratorManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
def get_full_name(self):
return self.email
def get_short_name(self):
return self.get_full_name()
@property
def is_staff(self):
return self.is_admin
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
Модель клиента, показанная ниже:
class Customer(Administrator):
first_name = models.CharField(max_length=255, default='', blank=False)
last_name = models.CharField(max_length=255, default='', blank=False)
DOB = models.DateField()
security_question1 = models.CharField(max_length=500, default='', blank=False)
security_question2 = models.CharField(max_length=500, default='', blank=False)
security_question_answer1 = models.CharField(max_length=500, default='', blank=False)
security_question_answer2 = models.CharField(max_length=500, default='', blank=False)
# REQUIRED_FIELDS = ['email', 'first_name', 'last_name', 'DOB', 'security_question1', 'security_question2']
is_active = True
is_admin = False






Вы ошибочно унаследовали модель Customer. Он должен быть унаследован от AbstractBaseUser как
class Customer(AbstractBaseUser):
#Your code
ОБНОВЛЕНИЕ-1
Вы можете использовать класс Abstract для наследования.
Определите base class как Abstract и наследование от этого класса может вам помочь.
class BaseClass(PermissionsMixin, AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
join_date = models.DateField(auto_now_add=True, editable=False)
objects = AdministratorManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
def get_full_name(self):
return self.email
def get_short_name(self):
return self.get_full_name()
@property
def is_staff(self):
return self.is_admin
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
class Meta:
abstract = True
class Administrator(BaseClass):
pass
class Customer(BaseClass):
first_name = models.CharField(max_length=255, default='', blank=False)
last_name = models.CharField(max_length=255, default='', blank=False)
DOB = models.DateField()
security_question1 = models.CharField(max_length=500, default='', blank=False)
security_question2 = models.CharField(max_length=500, default='', blank=False)
security_question_answer1 = models.CharField(max_length=500, default='', blank=False)
security_question_answer2 = models.CharField(max_length=500, default='', blank=False)
# REQUIRED_FIELDS = ['email', 'first_name', 'last_name', 'DOB', 'security_question1', 'security_question2']
is_active = True
is_admin = False
Извините за запутанную формулировку. Я хочу, чтобы модель Customer расширялась и унаследовала от модели администратора, и экземпляры Customer не добавлялись автоматически в таблицу администратора. Можно ли это сделать?