0

我正在使用django-registration应用程序。我有两个注册表单AB. A具有默认注册字段。在B我添加了自定义字段和信号。两个注册表单也执行以下信号。这就是我添加if form.is_valid(). 这很糟糕。我只想在BForm被调用时执行。有没有其他选择?谁能帮我改进这段代码?谢谢

class BForm(RegistrationForm):
    """
    Subclass of ``RegistrationForm``
    """
    phone = forms.CharField(max_length=100, required=False)

信号

def user_created(sender, user, request, **kwargs):
    form = BForm(request.POST)
    if form.is_valid():
        .....
user_registered.connect(user_created)
4

2 回答 2

0

在提交这两种形式时,将执行信号。发生这种情况是因为信号是从用户注册后的register视图发送的。django-registration因此,无论使用何种形式,如果用户注册成功,user_registered都会执行信号。

关于您对 form.is_valid() 的问题:

由于您拥有required=FalseBFormphone字段,即使phonePOST 数据中不存在,您的数据BForm也是有效的,并且您的接收器函数中的代码user_created将被执行。

您可以进行以下更改以user_created确保仅在使用 BForm 时才执行接收者功能。

def user_created(sender, user, request, **kwargs):
    if 'phone' in request.POST:
        .....
        .....
user_registered.connect(user_created)
于 2013-03-28T09:31:44.190 回答
0

根据Django 关于该主题的文档,您可以简单地执行以下操作:

user_registered.connect(user_created, sender=BForm)

它应该可以工作。

于 2012-11-03T16:17:07.780 回答