Django - 表单验证,隐藏和可见字段的clean方法
我正在尝试验证一些字段,其中一个是用户可以看到并填写的,另一个是用户看不见但由模板填写的。
这是我的表单:
class AForm(forms.Form):
xxxx = forms.CharField(max_length=30)
yyyy = forms.CharField(max_length=30,widget=forms.HiddenInput)
def clean(self):
xxxx=self.cleaned_data['xxxx']
yyyy=self.cleaned_data['yyyy'] ##ERROR
if function_check(xxxx,yyyy)==False:
raise forms.ValidationError("Try again!")
return xxxx
在我的模板中,我有:
<form method="post" action="">
{% csrf_token %}
{{form.xxxx}}
<input id="id_yyyy" name="yyyy" type="hidden" value='{{ code_generated_value }}' maxlength="30">
<input type="submit"/>
</form>
我遇到的唯一错误是:在 yyyy=self.cleaned_data['yyyy']
这一行。
我找到这个问题:Django 表单中的隐藏字段不在 cleaned_data 中
但这个问题对我帮助不大。
编辑 1:生成的 HTML 代码
<p><input id="id_xxxx" maxlength="30" name="xxxx" type="text" /></p>
<input id="id_yyyy" maxlength="30" name="yyyy" type="hidden" value='97a8eee9477b73dda401b15369f8db00a0d6ab79.png'>
<input type="submit"/>
1 个回答
2
总是检查生成的HTML和请求中的POST数据。这样你可以看到有没有缺少的字段或者其他问题。另外,记得使用 .get(field_name)
方法。
更多信息可以在这里查看。 这里讲的是如何正确地从 super
等中访问 cleaned_data
。