我想在几次尝试发送表单失败后显示一个额外的验证码字段。
处理普通表单时pretty easy,但如何在通用视图中实现呢?
# models.py
class MyCreateView(CreateView):
form_class = MyForm
model = MyModel
def form_valid(self, form):
if show_captcha:
form = MyForm(form, captcha=True)
return self.form_invalid(form)
# forms.py
class MyForm(ModelForm):
def __init__(self, *args, **kwargs):
captcha = kwargs.pop('captcha', None)
super(MyForm, self).__init__(*args, **kwargs)
if captcha:
self.fields['captcha'] = ReCaptchaField()
class Meta:
model = MyModel
fields = ['myfield']
修改
我更新了我的代码。我得到的错误是:
'MyForm' object has no attribute 'get'
它指向我的模板,行:
{{ form.as_p }}
答案 0 :(得分:1)
如果您使用的是通用视图,则没有任何不同。您只需要覆盖正确的方法:在这种情况下,get_form_kwargs
将是一个不错的选择,因为它返回关键字参数以传递给表单实例化。因此,在该方法中,您只需将额外参数添加到超类方法返回的任何内容中。