3

我想将语言环境选择添加到默认的 django-registration。我尝试从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)
4

2 回答 2

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 提供代码和支持。保持!

于 2010-09-20T16:45:59.643 回答
0

你的代码中有什么地方吗import regbackend?应该这样做以便执行以下字符串。

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

我有我的import regbackend例子urls.py。你也有这条线吗?

于 2010-09-18T19:31:31.233 回答