dfr*_*kow 4 django validation django-forms formset
手动示例: http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation(我正在使用Django 1.0.3在Google App Engine上运行)
码:
from django import forms
from django.forms.formsets import formset_factory
class ArticleForm1(forms.Form):
title = forms.CharField()
pub_date = forms.DateField()
class ArticleForm2(forms.Form):
title = forms.CharField()
class ArticleForm3(forms.Form):
title = forms.CharField()
pub_date = forms.CharField()
ArticleFormSet1 = formset_factory(ArticleForm1)
ArticleFormSet2 = formset_factory(ArticleForm2)
ArticleFormSet3 = formset_factory(ArticleForm3)
data = {
'form-TOTAL_FORMS': u'2',
'form-INITIAL_FORMS': u'0',
'form-0-title': u'',
'form-0-pub_date': u'16 June 1904',
'form-1-title': u'', # <-- this title is missing but required
'form-1-pub_date': u'16 June 1904', # <-- this date is missing but required
}
formset = ArticleFormSet1(data)
print "Should be False: %s" % formset.is_valid()
formset = ArticleFormSet2(data)
print "Should be False: %s" % formset.is_valid()
formset = ArticleFormSet3(data)
print "Should be False: %s" % formset.is_valid()
Run Code Online (Sandbox Code Playgroud)
输出:
$ .../ActiveStatePython2.5/python.exe formset_bug.py
Should be False: False
Should be False: True
Should be False: False
Run Code Online (Sandbox Code Playgroud)
ActiveState Python 2.5.4.4,Django 1.0.3 final.
看起来好像只有一个CharField(但是有2个CharFields或者一个CharField和一个DateField工作)没有验证.
我用Google搜索了这样一个错误,找不到任何东西.我还没有尝试过Django 1.1,但现在在GAE上使用1.0要容易得多.
好的,我现在更了解Django.这不是一个错误.
来自http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation:
"这个表单足够智能,可以忽略未被更改的额外表单."
从Django Formset.is_valid()失败的额外表单:
"Formsets将empty_permitted = True传递给所有"额外"表单,而一个未被修改的empty_permitted表单应始终通过验证."
当我将form-TOTAL_FORMS设置为u'2'时,它不再有任何额外的,并且验证完成了我的预期.
当存在第二个字段的一部分(作为DateField或CharField)时,该字段有一些东西,不再是额外的.