2009-08-20 6 views
4

매뉴얼 예 : http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation (I 구글 앱 엔진에서 실행 장고 1.0.3을 사용하고 있습니다)이것은 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의 파이썬 2.5.4.4 , 장고 1.0.3 최종.

CharField가 1 개 (CharField가 2 개 또는 CharField와 DateField가 작동) 인 경우 유효성 검사가되지 않는 것처럼 보입니다.

나는 이러한 버그를 감지하여 아무 것도 발견하지 못했습니다. Django 1.1을 아직 시도하지는 않았지만 현재 GAE에서 1.0을 사용하는 것이 훨씬 쉽습니다.

답변

7

좋아요, 이제 장고에 대해 더 많이 이해합니다. 이것은 버그가 아닙니다. http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation에서

:

"는 해당 formset은 변경되지 않은 여분의 형태를 무시 똑똑." Django Formset.is_valid() failing for extra forms에서

:

추가 "Formsets이 모든 = 진정한 empty_permitted 패스", "양식 및 수정되지 않은 empty_permitted와 형태는 항상 유효성 검사를 통과해야합니다."

form-TOTAL_FORMS를 u'2 '로 설정하면 더 이상 추가 기능이없고 유효성 검사가 예상 한대로 수행됩니다.

두 번째 필드의 일부 (DateField 또는 CharField)가있을 때 필드는 몇 가지 요소가있어서 더 이상 필요하지 않습니다.