добавление дополнительного поля к django-регистрации по сигналам - PullRequest
3 голосов
/ 18 сентября 2010

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

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

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)

* РЕДАКТИРОВАТЬ * Я попытался перейти в производство - просто для теста - и это вызвало некоторые ошибки.Я изменил код, но профиль не сохранился.Вот что я попробовал:

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)

Ответы [ 2 ]

0 голосов
/ 20 сентября 2010

Не знаю почему, но не понравилось 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 голосов
/ 18 сентября 2010

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

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

В моем примере import regbackend в urls.py. У вас тоже есть эта строка?

...