这是Django formset验证中的错误吗?

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要容易得多.

dfr*_*kow 7

好的,我现在更了解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)时,该字段有一些东西,不再是额外的.