2015-11-24 3 views
0

Я начинаю с дизайна схемы приложения Django, и моя схема имеет модели UserProfile, UserFavourites и UserComments. После этого немногих исследований я обнаружил, что мы можем пользовательского Джанго собственной User модель или мы можем создать собственную модель пользователя, которая будет распространяться от AbstractUserСледует ли определять собственную модель пользователя в django или использовать пользовательскую модель Django auth?

Platform = Django 1.8.5 

Я нашел много подобных вопросов, но теперь у меня есть новый вариант В структуре Django что-то изменилось?

необходимо также знать плюсы и минусы каждого подхода

+0

Прос вам не нужно писать это самостоятельно или беспокоиться об этом вообще .... против вы его не писали и могут хотеть что-то, о чем автор не думал ... –

ответ

2

В новом проекте настоятельно рекомендуем начать с пользовательской модели пользователя.

Причина в том, что если вы хотите позже изменить свою модель пользователя, тогда есть четкий способ сделать это (миграции). Тем не менее, переход от пользователя auth-пользователя к пользовательскому пользователю, когда у вас уже есть отношения ForeignKey (и т. Д.) С auth-User, является больной () (см. Ниже). Учитывая, что очень легко начать с вашей собственной модели в начале проекта (возможно, просто скопируйте модель auth), есть очень мало оснований не делать этого.

Документах сказать о том, как трудно изменить AUTH_USER_MODEL позже:

Предупреждение

Изменение AUTH_USER_MODEL имеет большое влияние на вашу структуру базы данных. Он изменяет доступные таблицы, и это повлияет на построение внешних ключей и отношений «многие ко многим» в . Если вы намереваетесь установить AUTH_USER_MODEL, вы должны установить его перед созданием любых маршрутов или выполнить переход на manage.py в первый раз.

Изменение этого параметра после того, как у вас есть таблицы, созданные не поддерживаются по makemigrations и приведут вас, чтобы вручную исправить схемы, порт данные из старой таблицы пользователя, и, возможно, вручную повторно некоторые миграции.

Предупреждение

Из-за ограничения функции динамической зависимости Джанго для заменяемых моделей, вы должны убедиться, что модель ссылается AUTH_USER_MODEL создается в первой миграции своего приложения (обычно называется 0001_initial); в противном случае у вас будут проблемы с зависимостью.

Кроме того, вы можете столкнуться с CircularDependencyError при запуске ваши миграции как Django не смогут автоматически разорвать петлю на зависимости из-за динамическую зависимость. Если вы видите эту ошибку, , вы должны сломать цикл, перемещая модели, зависящие от модели пользователя , во вторую миграцию (вы можете попробовать сделать две нормальные модели , которые имеют ForeignKey друг к другу и видят, как макетирование разрешает это циклическая зависимость, если вы хотите увидеть , как это обычно делается)

другими словами, если вы решили не использовать AUTH_USER_MODEL в начале вашего проекта, это практически невозможно изменить позже.

Существует ticket #24370 для добавления пользовательской модели и AUTH_USER_MODEL к шаблону проекта по умолчанию и рекомендуется делать это в документации. Этот билет просто ждет, когда кто-то его выполнит.

+0

Как это повлияет или повлияет на аутентификацию и другие вещи? – ashishmohite

+0

Также, пожалуйста, отправьте ссылку – ashishmohite

+0

Если вы установили AUTH_USER_MODEL и наследовали от AbstractUser, он будет полностью бесшовным. – RemcoGerlich

2

Вытащил из документации Джанго

Если вы хотите сохранить информацию, связанную с пользователем, вы можете использовать один-к-одному отношения на модель, содержащая поля для дополнительной информации. Эта модель один-к-одному часто называют модель профиля, как это может хранить без аутентификации соответствующей информации о пользователе сайта

Так просто добавьте дополнительные пользовательские поля для UserProfile модели. Сделайте индивидуальные отношения с каждой вашей желаемой моделью

+0

Вы должны сделать это для получения дополнительной информации, касающейся пользователь (например, «репутация» или так), но для материалов, связанных с auth, вы должны создать пользовательскую модель пользователя в начале вашего проекта и установить для нее AUTH_USER_MODEL. Если вы этого не сделаете, и вы хотите, скажем, изменить использование адресов электронной почты в качестве имен пользователей позже, вы не сможете. – RemcoGerlich

Смежные вопросы