четверг, 5 мая 2011 г.

Django: обслуживание встроенных данных django.contrib.auth.models.User и данных профайла пользователя через единую форму.

Избитая задача: сделать профайл пользователя, расширяющий встроенную модель django.contrib.auth.models.User. Допустим, нужно добавить в профайл юзера поле about, где он может написать кратко о своих интересах и т.п. Предполагается, что система авторизации юзеров на основе встроенных стредств Django у вас на сайте уже имеется.

Делаем, как прописано в мануалах Django. Определяем модель, расширяющую django.contrib.auth.models.User:

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

class UserProfile(models.Model):

# необходимое поле для связки со встроенной моделью юзера Django
user = models.ForeignKey(User, unique=True)

# наше добавляемое поле
about = models.TextField(blank=True)

ну и сохраняем этот класс в свой models.py

В settings.py проекта прописываем параметр AUTH_PROFILE_MODULE, который позволит обращаться к нашей расширенной модели через вызов метода .get_profile у встроенной модели django.contrib.auth.models.User.

AUTH_PROFILE_MODULE = 'models.UserProfile'

В принципе, модель готова. Теперь (например) в шаблонах можно использовать такую конструкцию для вывода нашего поля about:

{{ user.get_profile.about }}