【问题标题】:Django form with __init__ doesn't clean fields带有 __init__ 的 Django 表单不清理字段
【发布时间】:2013-07-28 17:40:59
【问题描述】:

我有一个 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})

无论我在字段中输入什么,它都不会验证。事实上,它甚至看起来都不像清理田地。点击注册按钮后,我只是返回一个新的空白表单,没有错误,什么都没有。

有什么想法吗?

【问题讨论】:

  • 在else块中,能不能把form.errors放上来看看是什么错误?
  • 你需要自己做一些调试;除非这是一个已知问题,否则很难用此处提供的信息来回答。在这里和那里放置打印语句以查看您的表单发生了什么。

标签: django forms validation


【解决方案1】:

根据您发布的代码,您似乎将request.POST 传递给request 参数以用于RegistrationForm。即你正在做相当于:

form = RegistrationForm(request=request.POST)

你真正想做的是:

form = RegistrationForm(request=request, data=request.POST)

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

【讨论】:

  • 就是这样。谢谢!
猜你喜欢
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2021-09-15
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多