【问题标题】:Django form validation on empty IntegerField空 IntegerField 上的 Django 表单验证
【发布时间】:2012-04-15 02:00:47
【问题描述】:

我有一个不作为 HTML 页面的一部分呈现但验证输入的表单:

class milestone_form(forms.Form):
    name = forms.CharField(required=True)
    completion = forms.IntegerField(initial=0, required=False)
    due_date = forms.DateField(required=True,input_formats={'%d.%m.%Y'})
    phase = forms.IntegerField(required=True)

这个完成位会导致很多问题:

form = milestone_form(request.POST)
form.is_valid()#will return False on empty completion

我尝试覆盖表单的 clean() 以在它为空时使完成 = 0:

def clean(self):
    cleaned_data = self.cleaned_data
    if cleaned_data.get('completion') is None:
        cleaned_data['completion'] = 0
    return cleaned_data 

但是,它没有帮助。我还缺少什么吗?

【问题讨论】:

  • 您应该在表单中包含input 以完成填写,但使用HiddenInput 小部件使其不显示。
  • 我运行了您提供的代码,它对我来说运行良好。当完成为 None 或 POST 数组中不存在时,表单被报告为有效。尝试在表单的 clean 方法中更改完成的值也没有用,因为它是验证和清理链中要调用的最后一个函数。看看:docs.djangoproject.com/en/1.3/ref/forms/validation/…
  • 这是一个可用于输入的真实输入 - 我只希望当该字段为空时它为“0”。
  • @abhaga,你很幸运 :) 它对我来说运行不佳:<ul class="errorlist"><li>completion<ul class="errorlist"><li>Enter a whole number.</li></ul></li></ul> 尽管表单调试显示 completion = {int} 0

标签: django django-forms django-validation


【解决方案1】:

这可能是我为空白字段返回整数的方式,并进行错误检查:

from django.forms import ValidationError

def clean_completion(self):
    if self.cleaned_data.get('completion'):
        try:
            return int(self.cleaned_data['completion'].strip())
        except ValueError:
            raise ValidationError("Invalid number")
    return 0

【讨论】:

  • clean_completion 没有受到影响
  • 如果我使用这个 def 作为字段的验证器,表单仍然无效并返回 enter a whole number 尽管completion = {int}0
猜你喜欢
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 2011-03-10
  • 2011-01-19
  • 2021-06-05
  • 1970-01-01
相关资源
最近更新 更多