Django - 表单验证,隐藏和可见字段的clean方法

2 投票
1 回答
3062 浏览
提问于 2025-04-18 07:36

我正在尝试验证一些字段,其中一个是用户可以看到并填写的,另一个是用户看不见但由模板填写的。

这是我的表单:

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

撰写回答