在表单验证错误时清空Django表单字段?
我有一个Django表单,用户可以用它来更改密码。不过,我觉得当表单出错时,字段里还留着用户输入的内容,这样很让人困惑。
我尝试了几种方法来清除表单的数据,但总是收到一个错误信息,内容是这个QueryDict实例是不可变的
。
有没有合适的方法可以在clean()
里清空某个表单字段或者整个表单的数据呢?
7 个回答
2
有人教我怎么做这个。这个方法对我有效:
post_vars = {}
post_vars.update(request.POST)
form = MyForm(post_vars, auto_id='my-form-%s')
form.data['fieldname'] = ''
form.data['fieldname2'] = ''
7
关于不可变的 QueryDict 错误,你的问题几乎肯定是因为你是这样创建你的表单实例的:
form = MyForm(request.POST)
这意味着 form.data 就是从 POST 变量创建的实际 QueryDict。由于请求本身是不可变的,所以当你尝试更改其中的任何内容时,就会出现错误。在这种情况下,下面的说法
form.data['field'] = None
和下面的内容是完全一样的:
request.POST['field'] = None
如果你想要一个可以修改的表单,你应该这样构造它:
form = MyForm(request.POST.copy())
0
如果你需要对表单中的多个字段进行额外的验证,可以重写 .clean() 方法。但如果只是针对一个字段,你可以创建一个 clean_field_name() 方法。
http://docs.djangoproject.com/en/1.1/ref/forms/validation/#ref-forms-validation