2009-08-20 7 views
4

マニュアル例:http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation(私はGoogle App Engineの上で実行するようにDjangoの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のPythonの2.5.4.4 、Django 1.0.3 final。

CharFieldが1つしかない場合(CharFieldが2つ、CharFieldが1つで、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 'に設定すると、余分なものはなくなり、検証で期待したことが行われます。

2番目のフィールドの一部(DateFieldまたはCharFieldのいずれか)がある場合、フィールドにはいくつかのものがあり、もはや余分になりません。

関連する問題