2011-03-16 1 views
0
{% for form in formset.forms %} 
    <div class="elements"> 
      {{form.as_ul}} 
    </div> 
    <input type="image" value="ADD" id="add_more"> 
{% endfor %} 

voici ce que j'ai dans jsajoutant des formes de formset sur la mouche de côté serveur

$('#add_more').click(function(){ 
     if($('.app-form').valid()){ 
     cloneMore('div.ul:last','prefix'); 
    } 
}); 

et le reste est identique à la référence this reference J'essaie d'afficher des formulaires lorsque l'utilisateur passe pour " ADD ".when add est pressé, il va à la vue ainsi que d'imprimer un autre formulaire en utilisant jquery. dans les vues.

def start(request): 
     qd = request.POST 
     ffact = formset_factory(ModelForm,extra=int(qd['prefix-TOTAL_FORMS'])) 
     fset = ffact(qd,prefix='prefix') 
     if fset.is_valid(): 
      return render_to_response('test.html',{'formset':fset}) 
     else: 
      return render_to_response('test.html',{'formset':fset}) 

Mais jquery se traduit par une forme supplémentaire, même si le formulaire soumis n'est pas valide, alors que vue se traduit par les messages d'erreur pour tous les champs de formulaire qui ne sont pas valides. Comment puis-je faire une action de clic en attente ou en quelque sorte communiquer avec le résultat de validation views.py et seulement ensuite afficher un formulaire supplémentaire? Appréciez-le.

+0

Avez-vous du code (HTML, JS) pour commencer? – mattsven

+0

j'ai fait mettre à jour la question avec cette info. Merci pour votre temps. – stackover

Répondre

0

cela pourrait être fait de deux façons: soit à partir de l'utilisateur ou à partir de backend mais à ma question NO. Il n'y a aucun moyen [i dint trouver un] pour attacher jquery/django à cet effet. Je suis en train de faire la chose entière à la fin du serveur: dans views.py:

query_dict = request.POST 
tot = int(querydict['prefix-TOTAL_FORMS']) 
    ffact = formset_factory(ModelForm,extra=tot) 
    fset = ffact(query_dict,prefix='prefix') 
    if fset.is_valid(): 
     ffact = formset_factory(ModelForm,extra=1) 
     fset = ffact(initial=fset.cleaned_data,prefix='prefix') 
     return render_to_response('test.html',{'formset':fset,}) 

dans test.html:

{% for form in fset.forms%} 
    {{form.as_ul}} or anything that works for you 
{% endfor %} 

cela a fonctionné pour moi, il pourrait y avoir beaucoup plus efficace . Je suis plus qu'heureux d'apprendre à ce sujet.

Questions connexes