【问题标题】:Django - Form validation, clean method for both hidden and visible fieldsDjango - 表单验证,隐藏和可见字段的清洁方法
【发布时间】:2014-07-15 08:18:21
【问题描述】:

我正在尝试验证字段,一个由用户填写可见,另一个:对用户隐藏但由模板填写。

这是我的表格:

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'] 行中的“yyyy”。

我发现了这个问题:Hidden field in Django form not in 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"/>

【问题讨论】:

  • 你确定code_generated_value 会返回一些东西吗?您也可以尝试使用yyyy=self.cleaned_data.get('yyyy') 而不是yyyy=self.cleaned_data['yyyy'] 获取值
  • 你得到什么错误?
  • 另外,你为什么有这个return xxxx?它不应该出现在班级级别。
  • @nnaelle,是的,我确信code_generated_value 会返回一些东西。我按照您的建议尝试了yyyy=self.cleaned_data.get('yyyy'),但 yyyy 是空的。
  • @AlexShkop,我只收到问题末尾指出的错误。我纠正了我的缩进错误:在我的代码中很好,但在 Stackoverflow 中出错了,谢谢 ;)

标签: python django forms hidden-field


【解决方案1】:

始终检查生成的 HTML 和 POST 数据是否有请求。您将看到任何缺少的字段和内容。另外,请使用.get(field_name) 方法。

Check here for more.如何从super等正确访问cleaned_data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2017-08-23
    • 1970-01-01
    • 2017-06-17
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多