2016-08-07 10 views
0

Ich habe eine Django-Vorlage, die eine Tabelle mit Django-Formsets darstellt.ID des Formulars im Formset erhalten, das bearbeitet wird

Vorlage (vereinfachte)

<table id = 'my_table'> 
    {% for form in my_formset %} 
     <tr><td>{{form.my_field}}</td></tr> 
    {% endfor %} 
</table> 

Jetzt habe ich ein jQuery-Code, die etwa wie folgt aussieht:

$(document).on('change', '#my_table tr input[type = text], input[type = number]', function(){ 
     // currently the following code handles save event 
     // $.post ('/save_my_form/', $form.serialize()) 
    }); 

und die entsprechenden Django Ansicht

def save_my_form(request): 
    # ....... 
    for form in order_draft_formset: 
     if form.is_valid(): 
      form.save() 
    # ....... 

Die Problem mit diesem Ansatz ist, dass ich nur einen einzigen modifiziere Eingabeelement in einer einzigen Form, während die Django-Ansicht das gesamte Formset durchläuft. Die Frage ist, gibt es einen eingebauten Django Weg, um die Form zu holen, in der die modifizierte Eingabe lokalisiert ist, so dass ich nur dieses genaue Formular in meiner Ansicht speichere, ohne das ganze Formularset durchzugehen. Ich habe das Gefühl, dass Jquery irgendwie Informationen über Post-Request-Parameter übermitteln muss, die Django dabei helfen könnten. Im Moment denke ich darüber nach, die automatisch von Django generierte ID, zB id_form-5-my_field, zu analysieren und in Jquery "5" daraus zu machen und diese "5" an Django weiterzuleiten. Aber ich habe das schreckliche Gefühl, dass dies eine "schmutzige" Methode ist, und es muss einen saubereren Weg geben, das zu tun. Irgendwelche Ideen dazu?

Antwort

2
if form.has_changed(): 
    if form.is_valid(): 
     form.save() 
+0

Ja, praktisch und elementar. Ich habe nicht darüber nachgedacht. Vielen Dank) –

Verwandte Themen