【问题标题】:adding extra field to django-registration using signals使用信号向 django-registration 添加额外字段
【发布时间】:2011-04-14 00:54:12
【问题描述】:

我想在默认的 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)

【问题讨论】:

    标签: django django-registration


    【解决方案1】:

    您的代码中有某处import regbackend。应该这样做以便执行以下字符串。

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

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

    【讨论】:

    • 感谢您的帮助。是的,我有那个进口的。我尝试了其他方法,如上所示。
    • 因此,如果您确定调用了 user_created 但由于某种原因它没有保存其他数据 - 请使用日志记录来检查实际发生的情况。顺便提一句。 AnymalsProfile( user = user, locale = ProfileData["locale"] ) - 无需传递 user.id - 只需 user
    【解决方案2】:

    我不知道为什么,但它不喜欢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 提供代码和支持。继续加油!

    【讨论】:

    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2018-01-19
    • 2014-12-25
    • 2020-01-04
    相关资源
    最近更新 更多