使用信号向django-registration添加额外字段

时间:2010-09-18 07:44:03

标签: django django-registration

我想将区域设置选择添加到默认的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)

2 个答案:

答案 0 :(得分:0)

你的代码import regbackend中是否有某个地方?这应该是为了执行以下字符串。

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

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

答案 1 :(得分:0)

我不知道为什么,但它不喜欢cleaning_data。现在可以使用以下方法:

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

感谢@dmitko的代码和支持。坚持下去!