Добавление пользовательских полей в таблицу auth_user в Django - PullRequest
10 голосов
/ 12 марта 2012

В настоящее время я создал другой класс / таблицу с именем MyAppUser с моими пользовательскими столбцами (такими как адрес и номер телефона), который имеет внешний ключ для аутентификации Django User.

Примерно так

from django.db import models
from django.contrib.auth.models import User

class MyAppUser( models.Model ) :
    def __unicode__( self ) :
       return self.user.username

    user    = models.ForeignKey( User )
    comment = models.TextField( blank = True )
    phone   = models.CharField( max_length = 135, blank = True )

Является ли вышеуказанный метод хорошей практикой? Или я должен попытаться изменить auth_user напрямую? И если так, как бы я это сделал?

Бонусный вопрос: есть ли способ, чтобы обе мои пользовательские таблицы также назывались User? Я думал о попытке from django.contrib.auth import models, затем о вызове models.User, но потом я думаю, что это также будет конфликтовать с django.db.models. Может мне попробовать from django.contrib.auth.models import User as AuthUser? Это хорошая идея?

Ответы [ 2 ]

11 голосов
/ 12 марта 2012

Django предоставляет встроенную поддержку для расширения пользователем ваших собственных свойств, называемых Профили пользователей .Хороший краткий обзор того, как его настроить, описан здесь .

1 голос
/ 12 марта 2012

Как правило, я предпочитаю метод, я не люблю трогать пользователя Django просто для безопасности.Таким образом, вы знаете, что не будете конфликтовать с чем-либо в пользовательской модели, и это проясняет, какой код является структурным кодом, а какой - вашим кодом.

Обычно я не называю это MyAppUserно чаще всего что-то вроде UserSettings.Я не хочу, чтобы мои пользовательские классы были перепутаны как замены для объекта User, но я просто предоставляю больше информации.

Обычно в приложениях у вас есть внешние ключи для User повсюду,поэтому я все еще использую класс Django User для всех этих целей.Я нахожу, что это делает вещи чище.

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

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