Возможно ли использовать несколько пользовательских пользовательских моделей в django?

#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

Это должно сработать, если вам нужно больше разъяснений, пожалуйста, дайте мне знать