#django #django-models
#django #django-модели
Вопрос:
У меня есть приложение Django 1.5, которое в настоящее время имеет 2 разные модели для каждого пользователя: встроенную User
модель и мою собственную MyUser
модель, которая содержит информацию, которая также используется в процессе аутентификации.
Я хотел бы объединить эти две модели в одну или, по крайней мере, ссылаться на одну из другой.
Если бы мне нужно было создать новое приложение, я бы сделал AUTH_USER_MODEL = 'myapp.MyUser'
, но согласно документам, изменение пользовательской модели вносит много изменений в базу данных и может быть затруднено переносом в существующее приложение.
С другой стороны, в документах также говорится, что ссылочная модель профиля должна только store non-auth related information about a site user
.
Итак, мой вопрос: в существующем приложении, какой предпочтительный способ объединить мою пользовательскую модель пользователя со встроенной User
моделью?
Комментарии:
1. Что вы подразумеваете под «ссылкой на одно из другого»? У них уже нет взаимосвязи, например, OneToOneField?
2. Нет, это не так.
MyUser
в настоящее время не зависит отUser
модели, и это то, что я хотел бы изменить.
Ответ №1:
Миграция AUTH_PROFILE_MODULE
не является тривиальной, но определенно возможна:
Смотрите http://www.caktusgroup.com/blog/2013/08/07/migrating-custom-user-model-django / для подробного пошагового описания процесса.
Если вы готовы потратить время на то, чтобы сделать это сейчас, это может стать значительным шагом в сокращении технической задолженности в вашем проекте.
Ответ №2:
Я предложу использовать отношение один к одному в django. Модель может быть похожа:
class CustomUser(models.Model):
dj_user= models.OneToOneField(User)
Комментарии:
1. Это то, что говорится в документах. Однако в нем также говорится, что в этом случае
CustomUser
следует хранить только данные, не являющиеся аутентификационными. Интересно, почему…2. Это означает, что вы должны хранить имя пользователя и пароль в
User
3. Да, но мое приложение включает аутентификацию не только по имени пользователя и паролю, поэтому в моей пользовательской модели пользователя больше данных, связанных с аутентификацией.
4. Ну, пользовательская модель хранит много информации, такой как first_name, last_name, email и т.д. В соответствии с этим: docs.djangoproject.com/en/dev/topics/auth/default/… для аутентификации вам потребуются только имя пользователя и пароль (если вы используете систему аутентификации django), другая связанная информация может храниться в полях вашей пользовательской модели. 🙂 .
5. Спасибо ruddra. Дело в том, что у меня есть некоторые пользовательские серверные системы аутентификации, которые требуют других данных, кроме имени пользователя и пароля, и эти данные хранятся в пользовательской модели пользователя.