在表单验证错误时清空Django表单字段?

7 投票
7 回答
13128 浏览
提问于 2025-04-15 19:50

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

撰写回答