2009-07-29 7 views
1

Voici un exemple:Pouvez-vous créer un jeu de formulaires Django pour valider les données initiales?

from django import forms 
class ArticleForm(forms.Form): 
    title = forms.CharField() 
    pub_date = forms.DateField() 

from django.forms.formsets import formset_factory 
ArticleFormSet = formset_factory(ArticleForm) 

formset = ArticleFormSet(initial=my_data) 

So « my_data » dans l'exemple est les données que je veux former pour montrer quand il est d'abord chargé avant toute entrée d'utilisateur. Mais je voudrais aller de l'avant et exécuter la validation du formulaire sur les données afin que l'utilisateur puisse voir s'il existe des erreurs existantes avant de modifier les données.

J'ai essayé de faire ceci:

formset = ArticleFormSet(initial=my_data) 
formset.is_valid() 

Mais il n'a pas aidé.

Répondre

1

Je ne vois pas comment il peut y avoir des erreurs de validation si les données viennent juste de sortir du DB. Cependant, il est assez facile de le faire - au lieu de passer les données comme initial, passez-le comme data, comme s'il venait d'un POST.

formset = ArticleFormSet(data=my_data) 

Ceci définit le formulaire comme lié, et déclenche la validation.

+2

Cela ne fonctionnerait pas parce que les données soumises par l'utilisateur est une grande dict avec chaque numéro de formulaire, par exemple, {'form-386-pubdate': '2009-10-31 00: 00: 00.00', 'formulaire -153-titre ':' 135 ',' formulaire-123-titre ':' 123 ', ... les formsets sont un peu différents des formes normales. – Greg

0

Utilisez

formset = ArticleFormSet(data=my_data)

Très important, my_data devrait être un dict avec ce format

data = { 
    'form-TOTAL_FORMS': u'2', 
    'form-INITIAL_FORMS': u'2', 
    'form-MAX_NUM_FORMS': u'', 
    'form-0-title': u'Test', 
    'form-0-pub_date': u'1904-06-16', 
    'form-1-title': u'Test', 
    } 

forme TOTAL_FORMS et forme-INITIAL_FORMS sont obligatoires !!!