Pra*_*mod 4 django validation django-forms
我正在使用django 1.5.4
这是我面临的问题的最小例子.
该模型:
#models.py
from django.db import models
class SampleModel(models.Model):
spam = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)
表格:
#forms.py
from django.forms import ModelForm
from .models import SampleModel
class SampleModelForm(ModelForm):
class Meta:
model = SampleModel
fields = ('spam', )
Run Code Online (Sandbox Code Playgroud)
来自django shell:
>>> data = {} #intentionally blank
>>> form = SampleModelForm(data)
>>> is_valid = form.is_valid() #is_valid is True
>>> form.save() # model instance is created with "spam" set to False by default.
Run Code Online (Sandbox Code Playgroud)
我是否错误地验证了表单?form.is_valid正确验证其他类型的字段.该文件表明,所有的字段默认情况下必需的,但is_valid返回True没有布尔关键领域存在.
我需要确保输入数据中存在布尔字段.截至目前,我手动检查该字段是否存在且是否为类型bool.你认为我应该覆盖form.is_valid并添加这个检查,以便它也可以重复用于其他模型吗?
事实证明(从代码检查;文档没有说)模型BooleanField已经blank=True在他们的__init__方法中自动设置,因此不需要自动创建的模型表单字段.这在考虑时是有意义的(虚假计数为空白,因此BooleanField需要它是真的)但是当你阅读文档时它并不明显.
如果你想要它True,通常的表单字段覆盖适用 - 自己声明字段或在验证之前将其required属性设置为True某个地方(我通常使用表单的__init__方法).如果你想让它允许True或False不允许Python None,那就更难了.
具体来说,a的标准小部件BooleanField是一个复选框.浏览器不会为未选中的复选框提交任何内容,因此复选框小部件会将提交中的字段缺失视为False.没有办法区分用户没有从输入真正不好的情况中选择复选框.你可以使用不同的窗口小部件(比如,RadioSelect)至少有可能使浏览器提交的东西False,但你仍然有该问题BooleanField的to_python方法,它的值转换为boolean验证过,所以你必须子类和覆盖.
幸运的是,False验证代码不会将其视为空,因此如果您这样做,您将能够设置required=True并且不需要自定义清理方法.
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |