我正在使用django-registration应用程序。我有两张注册表A和B。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)发布于 2012-11-04 00:17:08
根据Django's documentation on the topic,您可以简单地执行以下操作:
user_registered.connect(user_created, sender=BForm)它应该是有效的。
发布于 2013-03-28 17:31:44
在提交两个表单时,信号将被执行。这是因为信号是在用户注册后从django-registration的register视图发送的。因此,无论使用哪种形式,如果用户成功注册,信号user_registered都将被执行。
关于form.is_valid()的问题:
由于您在BForm的phone字段上设置了required=False,因此即使POST数据中没有phone,您的BForm也将是有效的,并且您的接收器函数user_created中的代码将被执行。
您可以对user_created进行以下更改,以确保只有在使用BForm时才执行接收器函数。
def user_created(sender, user, request, **kwargs):
if 'phone' in request.POST:
.....
.....
user_registered.connect(user_created)https://stackoverflow.com/questions/13207324
复制相似问题