Почему я не должен добавлять дополнительные поля профиля непосредственно в мою таблицу django.contrib.auth.models.User? - PullRequest
3 голосов
/ 22 мая 2011

Чтобы добавить дополнительную информацию о профиле пользователя в Django, кажется, что использование AUTH_PROFILE_MODEL - рекомендуемый путь.

Однако есть ли какие-либо недостатки при добавлении дополнительных полей профиля непосредственно в таблицу django.contrib.auth.models.User? Мне кажется, это намного проще / прямолинейнее (хотя, конечно, я пока не разбираюсь в использовании сигналов).

Существуют ли очень веские практические причины, препятствующие такому поступку?

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

Я могу думать о следующих причинах:

Обновления Django

Вы должны обновлять свой contrib.auth каждый раз, когда обновляете Django, чтобы не сломать приложение, и это кошмар обслуживания. Использование метода AUTH_PROFILE_MODEL делает обновления Django безболезненными, а также позволяет добавлять новую информацию в User. Это называется слабая связь я верю.

User зависимые приложения

Стороннее приложение, которое в значительной степени полагается на User, имеющее точно такие же поля, завершится ошибкой, если, например, вы добавите в модель User поля, объявленные как NOT NULL, или удалите те, которые, как ожидается, будут там.

Дополнительная информация о AUTH_PROFILE_MODEL:

1 голос
/ 22 мая 2011

Краткий ответ, удобнее использовать профили.Исходя из моего понимания, я не советую вносить изменения, которые будут удалены после обновления версии Django.Если вы измените модель django.contrib.auth.models.User, эти изменения будут удалены после обновления, или вы будете ответственны за объединение любых изменений, если таковые имеются.С другой стороны, если код живет в вашем приложении, например, в профилях, им легче управлять.Исходя из этого, если вы найдете другой метод, который достигает того же самого, или если вы не видите его в качестве хлопот по обслуживанию, то он не должен иметь большого значения, так или иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...