2017-10-11 3 views
1

Si l'utilisateur ajoute un autre formulaire à formset, mais a déjà tapé quelque chose dans la première forme, alors l'entrée sera perdue, comme nouveau formulaire a été créé. L'utilisateur a maintenant 2 formulaires vides. Existe-t-il un moyen d'ajouter un nouveau formulaire au formset sans perdre l'entrée de l'utilisateur?Comment ajouter un nouveau formulaire à django formset et ne pas perdre l'entrée utilisateur des formulaires précédents

forms.py

class Form(forms.Form): 
    client = forms.CharField(label='Client', required=False) 
    end_client = forms.CharField(label='End client', required=False) 
    product = AutoCompleteSelectField(lookup_class=ProductLookup, label='Model', required=False) 

views.py

def get(self, request): 
    request.session['form_count'] = 1 

    FormSet = formset_factory(Form) 
    formset = FormSet() 

    return render(request, self.template_name, {'formset': formset}) 

def post(self, request): 
    if "add-form" in request.POST: 
     form_count = request.session['form_count'] 
     print("There are " + str(form_count) + " forms") 

     form_count = form_count + 1 
     request.session['form_count'] = form_count 
     print("Form count increased by 1, form count is: " + str(form_count)) 

     FormSet = formset_factory(Form, extra=int(form_count)) 
     formset = FormSet() **<-- if I put request.POST in here, new form will not be created** 

     return render(request, self.template_name, {'formset': formset}) 

fichier html

<div class="content"> 
 
    <form method="post"> 
 
    {% csrf_token %} {{ formset.management_form }} 
 
    <div class="form-group"> 
 
     {% for form in formset.forms %} 
 
     <table class='no_error'> 
 
     {{ form.as_table }} 
 
     </table> 
 
     <br> 
 
     <br> {% endfor %} 
 
    </div> 
 
    <input class="btn btn-primary" type="submit" value="Submit order" /> 
 
    <input name="add-form" class="btn btn-primary" type="submit" value="Add new product" /> 
 
    </form> 
 
</div>

Répondre