在表单验证错误上清除Django表单字段?

Chr*_*isW 7 python django django-forms

我有一个允许用户更改密码的Django表单.我发现字段的表单错误令人困惑,因为*'ed out数据仍在其中.

我已经尝试了几种删除form.data的方法,但我不断收到This QueryDict instance is immutable异常消息.

是否有正确的方法来清除单个表单字段或整个表单数据集clean()

Ian*_*and 6

关于不可变的QueryDict错误,您的问题几乎肯定是您已经创建了这样的表单实例:

form = MyForm(request.POST)
Run Code Online (Sandbox Code Playgroud)

这意味着form.data 从POST变量创建的实际QueryDict.由于请求本身是不可变的,因此当您尝试更改其中的任何内容时会出现错误.在这种情况下,说

form.data['field'] = None
Run Code Online (Sandbox Code Playgroud)

是完全一样的

request.POST['field'] = None
Run Code Online (Sandbox Code Playgroud)

要获得一个可以修改的表单,您需要像这样构造它:

form = MyForm(request.POST.copy())
Run Code Online (Sandbox Code Playgroud)


Igo*_*ira 0

如果您需要使用表单中的多个字段进行额外验证,请重写 .clean() 方法。但如果仅针对一个字段,您可以创建一个 clean_field_name() 方法。

http://docs.djangoproject.com/en/1.1/ref/forms/validation/#ref-forms-validation

  • 不过,伊戈尔走在正确的道路上,克里斯W。IMO,您应该使用 clean() 方法来验证两个密码 - 如果它们不正确,请清除 self.data 字段<此时>,然后再引发验证错误。 (4认同)