Должна ли моя пользовательская модель пользователя быть абстрактным классом?

#python #django

#python #django

Вопрос:

Я создал проект с пользовательской моделью пользователя и профилями, связанными с моим пользователем, таким образом:

 class User(AbstractBaseUser, PermissionsMixin):
    # ...

class BizProfile(models.Model):
   user = models.OneToOneField(settings.AUTH_USER_MODEL)
   # ....

class CliProfile(models.Model):
   user = models.OneToOneField(settings.AUTH_USER_MODEL)
   # ....
  

Я только что понял, что функционально я создаю BizProfile или CliProfile, но нет смысла создавать пользователя только в моем проекте.

В таком случае, должен ли я сделать свой пользовательский класс абстрактным? Каковы плюсы и минусы этого? В настоящее время он не абстрактен, но работает хорошо.

Спасибо.

Комментарии:

1. Как ответил @knbk, используйте базового пользовательского пользователя или пользователя django (если вам не нужно изменять основные поля, используемые для авторизации и т. Д.), Затем Добавьте профиль как поле один к одному (как вы сделали здесь).

Ответ №1:

Это невозможно.

Абстрактная модель — это модель, которая не существует в базе данных. Для работы внешнего ключа в базе данных должны существовать обе модели. Данные в User модели также должны быть сохранены в базе данных в любом случае.

Также невозможно каким-то образом иметь две отдельные пользовательские модели (например BizUser , и CliUser ), поскольку весь код в Django и других сторонних приложениях ожидает, что существует одна пользовательская модель, и не будет работать с несколькими моделями.

Комментарии:

1. Спасибо за это объяснение!