2009-08-20 8 views
4

exemple Manuel: http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation (j'utilise Django 1.0.3 pour fonctionner sur Google App Engine)Est-ce un bug dans la validation de formset Django?

code:

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

Sortie:

$ .../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.

Il semblerait que cela ne soit pas valable dans le cas d'un seul CharField (mais 2 CharFields ou un CharField et un DateField fonctionnent).

J'ai recherché un tel bug et je n'ai rien trouvé. Je n'ai pas encore essayé Django 1.1, mais il est beaucoup plus facile d'utiliser 1.0 sur GAE pour le moment.

Répondre

7

D'accord, je comprends mieux maintenant sur Django. Ce n'est pas un bug.

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

« Le formset est assez intelligent pour ne pas tenir compte des formes supplémentaires qui ne sont pas modifiés. »

De Django Formset.is_valid() failing for extra forms:

"Formsets passe empty_permitted = True à tous les "extra" formes, et une forme avec empty_permitted qui n'a pas été modifié devrait toujours passer la validation."

Lorsque je mets form-TOTAL_FORMS à u'2 ', il n'en a plus, et la validation fait ce que j'attends.

Lorsqu'il existe une partie d'un second champ (soit DateField ou CharField), le champ contient des éléments et n'est plus disponible.