#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. Спасибо за это объяснение!