2010-09-18 3 views
3

Я хочу добавить языковой выбор в стандартную django-registration. Я попытался выполнить этот урок от dmitko. Форма отображается правильно, но дополнительные данные (локаль) не сохраняются.добавление дополнительного поля в django-registration с использованием сигналов

Я определил пользовательскую модель:

class AnymalsProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    locale = models.CharField(max_length=2) 

def __unicode__(self): 
    return u'%s %s' % (self.user, self.locale) 

и форма:

from models import AnymalsProfile 
from registration.forms import RegistrationFormTermsOfService 

class UserRegistrationForm(RegistrationFormTermsOfService): 
    locale = forms.CharField(max_length=3, widget=forms.Select(choices=LOCALE_CHOICES),label='Language:') 

Поля отображаться правильно, но данные локалей (профиль) не сохраняется. Я полагаю, что regbackend.py моя проблема:

from anysite.models import AnymalsProfile 

def user_created(sender, user, request, **kwargs): 
     form = UserRegistrationForm(request.POST) 
     data = AnymalsProfile(user=user) 
     data.locale = form.cleaned_data["locale"] 
     data.save() 

from registration.signals import user_registered 
user_registered.connect(user_created) 

* EDIT * Я попытался двигаться в производство - только для испытания - и он поднял некоторые ошибки. Я изменил код, но профиль не сохраняется. Вот что я пробовал:

from anysite.models import AnymalsProfile 
from anysite.forms import UserRegistrationForm 

def user_created(sender, user, request, **kwargs): 
     form = UserRegistrationForm(request.POST) 
     if form.is_valid(): 
       ProfileData = form.cleaned_data 
       profile = AnymalsProfile(
       user = user.id, 
       locale = ProfileData["locale"] 
         ) 
       profile.save() 

from registration.signals import user_registered 
user_registered.connect(user_created) 

ответ

0

У вас есть где-то в вашем коде import regbackend. Это должно быть сделано для выполнения следующих строк.

from registration.signals import user_registered 
user_registered.connect(user_created) 

Я мой пример у меня import regbackend в urls.py. У вас есть эта линия?

+0

Благодарим за помощь. Да, я импортировал это. Я попробовал что-то еще, показанное выше. – tpm

+0

Итак, если вы уверены, что user_created вызывается, но по какой-то причине он не сохраняет дополнительные данные - используйте ведение журнала, чтобы проверить, что на самом деле происходит. КСТАТИ. AnymalsProfile ( user = user, locale = ProfileData ["locale"] ) - не нужно передавать user.id - только пользователь – dmitko

0

Я не знаю почему, но он не понравился cleaned_data. Он теперь работает, используя следующее:

def user_created(sender, user, request, **kwargs): 
     form = UserRegistrationForm(request.POST) 
     data = AnymalsProfile(user=user) 
     data.locale = form.data["locale"] 
     data.save() 

Спасибо @dmitko за код и поддержку. Так держать!

+0

Я пробовал делать то, что у вас есть, но у вас эта сложная ошибка, вы можете помочь? https://stackoverflow.com/questions/23695713/django-reg-extend-current-transaction-is-aborted-commands-ignored-until-end-o – KindOfGuy

Смежные вопросы