2013-07-17 2 views
2

me reste que cette vue simple:Est-ce que formset.is_valid() de django fonctionne?

import datetime 
from django import forms 
from django.forms.formsets import formset_factory 
from django.http import HttpResponse 
from django.shortcuts import redirect, render, render_to_response 
from django.views.generic.detail import DetailView 

from form_utils.forms import BetterForm 

from fb_app import models as fb_model 
from learn_forms import models as lf_model 

class ArticleForm(forms.Form): 
    title = forms.CharField(required=True) 
    #pub_date = forms.DateField() 


def formset(request): 
    print request.POST 
    ArticleFormSet = formset_factory(ArticleForm) # [1] 
    if request.method == 'POST': 
     formset = ArticleFormSet(request.POST) 
     print formset.is_valid() 
     if formset.is_valid(): 
      # do something with the formset.cleaned_data 
      pass 
    else: 
     formset = ArticleFormSet() 
     print formset.is_valid() 
    return render(request, 'formset.html', { 
     'formset': formset, 
    }) 

je clique soumettre à vide champ titre et la validation de formset dit qu'il est valide (j'attends un message sur la valeur requise) Mais si échange Formset avec la forme comme ceci:

ArticleFormSet = ArticleForm 

à la ligne marquée par: "# [1]" forme affiche le message 'Ce champ est obligatoire' (ce que je pense)

fichier html:

<form method="post" action="/lf/formset"> 
    {% csrf_token %} 
    <table> 
     {{ formset }} 
    </table> 
    <input type="submit" name="submit" > 
</form> 

Qu'est-ce qui ne va pas?

+0

* Où * échoue-t-il? Quelle erreur obtenez-vous exactement? Notez que l'appel de 'is_valid()' dans la clause 'else' échouera, car [les formulaires non liés ne sont pas valides] (https://docs.djangoproject.com/fr/1.5/ref/forms/api/#behavior- de formes non liées). –

+0

mis à jour, j'attends un message sur le titre requis – xliiv

Répondre

0

Le problème est de savoir comment appeler le formulaire dans les modèles. Voici comment cela devrait ressembler à:

<form method="post" action="/lf/formset"> 
    <table> 
     {% csrf_token %} 
     {{ formset.as_p }} 
    </table> 
    <input type="submit" name="submit" > 
</form> 

Vous pouvez en apprendre davantage sur les here.