#django #django-models
#django #django-models
Вопрос:
Я пытаюсь создать пользовательскую пользовательскую модель с помощью AbstracBaseUer в django 3.1. В моем приложении есть два типа пользователей. Читатель, издатель. Каждая модель должна иметь разные поля, поэтому я решил сделать две таблицы для каждой. Сначала я создал для них родительский класс с именем, User
которое наследуется от AbstractBaseUser.
class User(AbstarctBaseUser, PermissionMixin):
email = models.EmailField(primary_key=True)
USERNAME_FIELD = 'email'
# and some other fields and setting
Во-вторых, я создал Reader
и Publisher
класс, который наследуется от пользовательского класса.
class Reader(User):
# for Reader model Fields
class Publisher(User):
# for Publisher model Fields
Доступна ли эта структура в django?
И если да, то как мне переопределить UserManger
их?
Ответ №1:
Вы можете сделать что-то подобное, это работает отлично, в отличие от использования логического типа, который иногда прерывается
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
user_type_data = ((1, "Publisher"), (2, "Reader"))
user_type = models.CharField(default=1, choices=user_type_data, max_length=10)
class Publisher(models.Model):
admin = models.OneToOneField(CustomUser, on_delete = models.CASCADE)
name = models.CharField(max_length=20)
class Publisher(models.Model):
admin = models.OneToOneField(CustomUser, on_delete = models.CASCADE)
name = models.CharField(max_length=20)
Не забудьте добавить AUTH_USER_MODEL=YOURAPPNAME.CustomUser
Что касается UserManager, вы можете оставить его в покое, за исключением случаев, когда вы хотите настроить некоторые другие вещи.
Вы можете узнать больше, используя эту ссылку, https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
Это должно сработать, если вам нужно больше разъяснений, пожалуйста, дайте мне знать