/ /これはDjangoのフォームセット検証のバグですか? -django、django-forms、検証、formset

これはDjangoのformset検証のバグですか? - django、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()

出力:

$ .../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最終版。

CharFieldが1つだけの場合は検証されないように見えます(ただし、2つのCharFieldsまたはCharFieldとDateFieldが機能します)。

私はそのようなバグをGoogleで探し、何も見つけられませんでした。まだDjango 1.1を試していませんが、今のところGAEで1.0を使用する方がはるかに簡単です。

回答:

回答№1の場合は7

さて、私はDjangoについてもっと理解しました。これはバグではありません。

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

「フォームセットは、変更されていない余分なフォームを無視できるほどスマートです。」

から Django Formset.is_valid()が追加のフォームで失敗する

「フォームセットは、すべての「追加」フォームにempty_permitted = Trueを渡します。変更されていないempty_permittedのフォームは、常に検証に合格する必要があります。」

form-TOTAL_FORMSをu "2"に設定すると、余分なものはなくなり、検証は期待どおりになります。

2番目のフィールドの一部がある場合(DateFieldまたはCharFieldとして)、フィールドにはいくつかのものがあり、余分ではなくなります。