我正在使用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)
答案 0 :(得分:0)
根据Django's documentation on the topic,你可以这样做:
user_registered.connect(user_created, sender=BForm)
它应该有用。
答案 1 :(得分:0)
提交两个表格后,信号将被执行。发生这种情况是因为在用户注册后从register
django-registration
视图发送信号。因此,无论使用何种形式,如果用户成功注册,将执行信号user_registered
。
由于您在required=False
字段上有phone
,即使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)