带__init__的Django表单不会清除字段

时间:2013-07-29 03:03:34

标签: django forms validation

我有一个django表单,我正在尝试添加CAPTCHA支持。但是,这需要我将request.session传递给表单。为此,我将此构造函数添加到表单中:

def __init__(self, request=None, *args, **kwargs):
    super(RegistrationForm, self).__init__(*args, **kwargs)
    self.request = request

然后我通过将请求对象传递给它来实例化RegistrationForm。但是,在提交表单时,它无法清除任何字段。它只是验证失败并将空白字段传回模板。这是失败的注册码:

if request.method == 'POST':
    form = RegistrationForm(request.POST)
    if form.is_valid():
        ...do registration...
    else:
        return render(request, 'template.htm', {'form': form})

无论我在田里放什么,它都永远无法验证。事实上,它甚至看起来不像是清理田地。我只是在点击注册按钮后返回一个新的空白表格,没有错误,没有。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

根据您发布的代码,您好像将request.POST传递给request的{​​{1}}参数。即你做的相当于:

RegistrationForm

你真正想做的是:

form = RegistrationForm(request=request.POST)

试试这个,看看它是否适合你。