понедельник, 26 мая 2014 г.

Добавить поля в модель User в Django

Данный урок написан на базе рекомендаций документации Django по добавлению новых полей к модели пользователя.


1. Создадим новое приложение:
 manage.py startapp userprofile

2. Создадим модель Профиль Пользователя UserProfile, в которой добавляются новые поля к имеющейся в Django модели User. Редактируем файл userprofile/models.py:

# -*- coding:utf-8 -*-
from django.db import models
from django.contrib.auth.models import User


class UserProfile(models.Model):
    user = models.OneToOneField(User)
    avatar = models.ImageField(upload_to='images/users', verbose_name='Изображение')

    def __unicode__(self):
        return self.user

    class Meta:
        verbose_name = 'Профиль'
        verbose_name_plural = 'Профили'

3. Подключим наше приложение в проект, отредактировав settings.py:
INSTALLED_APPS = (
    # ...
    'userprofile',
)

4. Создаем таблицы для нашего приложения, выполнив в консоли команду:
 manage.py syncdb 

5. Для того, чтобы поле появилось в админке, отредактируем userprofile/admin.py:

# -*- coding:utf-8 -*-
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from .models import UserProfile


class UserInline(admin.StackedInline):
    model = UserProfile
    can_delete = False
    verbose_name_plural = 'Доп. информация'

# Определяем новый класс настроек для модели User
class UserAdmin(UserAdmin):
    inlines = (UserInline, )

# Перерегистрируем модель User
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

6. Перейдите в админке в раздел Пользователи, чтобы увидеть поле "Изображение"



7. Обратиться к добавленному свойству модели можно так:

>>> u = User.objects.get(username='johny')
>>> johny_avatar = u.userprofile.avatar

Комментариев нет:

Отправить комментарий