2014-11-17 2 views
0

Я хочу точно такое же поведение, как и django.contrib.auth.User, но мне нужно расширить модель с помощью некоторых пользовательских настроек и полей профиля.Extend Django User model

Я знаю, что в конечном итоге может сделать две новые модели, которые могут быть

class Profile(models.Model): 
    user = OneToOneField(User) 
    age = SmallPositiveIntegerField() 

и

class Preference(models.Model): 
    user = OneToOneField(User) 
    background_color = CharField(max_length=6) 

Я не знаю, если это умно, чтобы разделить эти вещи.

Но я хочу, чтобы восстановить пользовательские настройки на каждой странице, и если я использую этот подход, расширяя User модели с OneToOneField стоит другого SQL-запрос для каждого времени я получаю user.preference.background_color.

Я думаю, что это может быть излишним, чтобы заменить модель User (или что), и что я могу сделать?

Могут ли быть прокси-модели?

+0

https://docs.djangoproject.com/en/1.7/topics/auth/customizing/#a-full-example – coldmind

ответ

1

Как правило, люди рекомендуют делать это путем подклассификации AbstractUser (или AbstractBaseUser, если вы хотите еще меньше базовых полей пользователя, а baseuser просто дает вам пароль, отметку времени входа и is_active). Затем вы просто добавляете поля, как для обычной модели, и запрашиваете их, как и для обычной модели.