2016-04-19 14 views
1

in meiner Vorlage Benutzer kann hinzufügen (mit der Schaltfläche Hinzufügen :)) eine andere Instanz der gleichen Form (leere onec), aber wenn ich auf Senden (speichern) ony zuletzt eine eingegeben wird gespeichert wird. views.py:Speichern mehrerer Instanzen des gleichen Formulars in Django

def form_valid(self, form): 
     self.object = form.save() 
     return HttpResponseRedirect(self.get_success_url()) 

Vorlage:

<form action="{{ action }}" class="form-horizontal form-inline" method="post" enctype="multipart/form-data"> 

    {% csrf_token %} 

{% if object.id %} 
    <legend>Edit Object2</legend> 
{% else %} 
    <legend>Add Object2</legend> 
{% endif %} 

    {{ form }} 

    <div class="objects2"> 
     {% for objects2_form in form %} 
     <div id="objects2-{{ forloop.counter0 }}"> 


     </div> 
     {% endfor %} 
    </div> 

<div class="form-actions"> 
    <a href="#" id="add-object2" class="btn btn-info add-object2" >Add object2</a> 
    <button type="submit" class="btn btn-primary">Submit</button> 
</div> 
</form> 

EDIT: Ich habe beschlossen, es einfacher ist, ein Objekt zu der Zeit zu schreiben und machen auf der gleichen Seite speichern. Problem, das ich jetzt habe, ist, dass nur 1 (letztes) Formular auf Seite statt aller angezeigt wird. (Alle sind in db gespeichert). Und wie man leere Form als letzte zeigt?

EDIT2: Ich habe es geschafft, alle zeigen:

object2 = object2Model.objects.all() 
     return render_to_response('xxx.html', 
          {'form': form, 'object2': object2}, context_instance = RequestContext(self.request)) 

Also nur 1, was bleibt .. Wie leere Form zeigen ?? (ohne das Formset zu verwenden)

Antwort

0

Die name Attribute der Daten-Tags Ihres Formulars werden wiederholt. So überschreibt beispielsweise die letzte <input type="text" name="firstname"> alle vorherigen Felder mit demselben Namen name="firstname".

Es gibt nicht wirklich eingebaute Möglichkeit, die gleichen Formularfelder zweimal innerhalb desselben <form/> DOM-Elements zu rendern.

ich machen würde, die forms.Form Instanzen in verschiedenen <form/> Elementen und einem beigetreten sind <button onclick="submitAllForms()"> einreichen, die eine Javascript ruft alle vorhandenen <forms/> Objekte einzureichen.

Das wäre der sauberste Weg, besonders für Ihre serverseitigen Modelle.

So, unter Last, können Sie einfach das leere Formular DOM-Element auswählen und kopieren. Wenn der Benutzer dann auswählt, um eine weitere Instanz des Formulars hinzuzufügen, können Sie diese Kopie als Vorlage verwenden, um der Seite ein weiteres Formular hinzuzufügen. Sie könnten eine beliebige Nummer der gleichen Form haben, ohne zusätzliche Arbeit.

Dann, wenn der Benutzer das Formular übermittelt, wählen Sie einfach alle <form> DOM-Elemente und rufen .sumbit() auf jedem. Und Ihr Server wird nur reguläre forms.Form Instanzen sehen.

Verwandte Themen