Django

Django — свободный фреймворк для веб-приложений на языке Python

  • You are not logged in.

#1 Aug. 3, 2010 02:26:42

Admin
Registered: 2009-11-16
Posts: 39
Reputation: +  0  -
Profile   Send e-mail  

django-registration - добавление новых полей к форме

Предположим есть ситуация - когда нужно к модели User добавить новое поле "Город". Для этого мы заводим новую модель, скажем UserEx

class UserEx(models.Model):                                                                                                                                                             
    user = AutoOneToOneField(User, related_name='player_profile', verbose_name='Игрок')                                                                                          
    city = models.IntegerField('Город', default=0)


Создаем новую форму
class RegistrationFormUtfUsername(RegistrationFormUniqueEmail):
    '''
    Allowed UTF8 logins
    '''
    city =  forms.ChoiceField(choices = CITY_CHOICES, label = "Город")


Раньше приходилось переписывать у формы метод save(), в django-registration 0.8 появилась возможность повесить сигнал на создание юзера.

signal.py
# -*- coding: utf-8 -*-  
from registration.signals import user_registered
from models import UserEx
from globals.forms import RegistrationFormUtfUsername

#вешаем сигнал на создаение пользователя
def user_created(sender, user, request, **kwargs):
    form = RegistrationFormUtfUsername(request.POST)
    userex = UserEx(user=user, race= form.data["race"])
    userex.save()

user_registered.connect(user_created)


в urls.py подвешиваем сигнал и указываем на форму
from globals.forms import RegistrationFormUtfUsername
import signals
....
urlpatterns = patterns('',
....
#registration - тут важен порядок
url(r'^accounts/register/$', 'registration.views.register', {'form_class':RegistrationFormUtfUsername, 'backend': 'registration.backends.default.DefaultBackend'}, name='registration_register'),
(r'^accounts/', include('registration.urls')),
....
) 


Все - теперь при создании пользователя, обрабатывается сигнал и создается UserEx.

Offline

Board footer

Moderator control

Powered by DjangoBB