2009-08-20 45 views
4

手册例如:http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation(我使用Django 1.0.3对谷歌的App Engine运行)这是Django formset验证中的错误吗?

代码:

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() 

输出:

$ .../ActiveStatePython2.5/python.exe formset_bug.py 
Should be False: False 
Should be False: True 
Should be False: False 

的ActiveState的Python 2.5.4.4 ,Django 1.0.3 final。

它看起来好像只在一个CharField(但是2个CharFields或一个CharField和一个DateField工作)的情况下不能验证。

我谷歌搜索这样的错误,找不到任何东西。我还没有试过Django 1.1,但现在在GAE上使用1.0更容易。

回答

7

好吧,我现在更多地了解Django。这不是一个错误。

http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation

“的表单集是足够聪明,忽略不改变额外的形式。”

Django Formset.is_valid() failing for extra forms

“表单集通empty_permitted =真到所有‘额外’的形式,并与empty_permitted的形式没有被修改应该总是通过验证。”

当我将form-TOTAL_FORMS设置为u'2'时,它不再有任何额外的值,并且验证完成了我所期望的。

当第二个字段的一部分(无论是DateField还是CharField)时,该字段有一些东西,不再是额外的。