Django中通用视图中的动态表单字段

时间:2014-07-07 07:59:52

标签: python django django-forms

我想在几次尝试发送表单失败后显示一个额外的验证码字段。

处理普通表单时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 }}

1 个答案:

答案 0 :(得分:1)

如果您使用的是通用视图,则没有任何不同。您只需要覆盖正确的方法:在这种情况下,get_form_kwargs将是一个不错的选择,因为它返回关键字参数以传递给表单实例化。因此,在该方法中,您只需将额外参数添加到超类方法返回的任何内容中。