2016-07-19 7 views
1

In einer Vorlage habe ich zwei verbundene Listen, von denen eine zunächst leer ist. Der Benutzer muss bis zu drei Optionen aus der linken Liste auswählen, sie zur rechten Liste hinzufügen, sie (gemäß seinen Prioritäten) ordnen und dann zurücksenden.senden Sie eine Liste von ul zu Formular in Django

es sieht aus wie:

<ul id="sortable1" class="connectedSortable"> 
    <li value="1">Item A</li> 
    <li value="2">Item B</li> 
    <li value="3">Item C</li> 
    <li value="4">Item D</li> 
    <li value="5">Item E</li> 
    <li value="6">Item F</li> 
    <li value="7">Item G</li> 
</ul> 
</div> 

<ul id="sortable2" class="connectedSortable"> 
<!--here goes the initially empty list--> 
</ul> 

und in {% Skripte%} Block:

<script> 
    $(function() { 
    $("#sortable1, #sortable2").sortable({ 
     connectWith: ".connectedSortable" 
    }).disableSelection(); 
    }); 
</script> 

in models.py habe ich ein Feld, um die ausgewählten Informationen zu speichern:

preferences = CommaSeparatedIntegerField() 

Das Problem ist, wie POST-Informationen von der aktualisierten ul (sortable2) zurück in die Datenbank? Ich kann der Seite ein verstecktes Feld preferences hinzufügen und es dann mit jQuery füllen, aber es scheint wie eine hässliche Lösung. Was ist der richtige?

Antwort

0

Wenn Sie die aktualisierte ul (sortable2) POST zurück in die Datenbank, dann eine der möglichen Lösung ist, dass die ul (sortable2) in einem Form Daten, deren sollten Sie POST-Methode einreichen .

Nun, wenn eines der Li Element vom ul (sortable1) UL (sortable2) bewegt wird, dann wird ein Eingabeart Element ist auch im ul (sortable2) zusammen mit dem Listenelement eingefügt , wo "Wert" Attribut der Eingabe muss die sein, die gleiche wie das Element li Element in der UL (sortierbar1) war. Außerdem ist der Typ dieses Eingabeelements ausgeblendet.

Wenn Sie dieses Formular jetzt mit einer Absenden-Schaltfläche senden, erhalten Sie alle Daten in Ihren Ansichten zurück und können entsprechend Änderungen an Ihrer Datenbank vornehmen.

+0

"dann wird auch ein Element vom Eingabetyp eingefügt" - meinen Sie, dass es automatisch eingefügt wird, sobald ich ul (sortable2) in ein Formular einfüge oder ich selbst den Eingabetyp hinzufügen soll? –

+0

Sie müssen eine OnClick-Funktion für die Schaltfläche schreiben, auf die die Elemente von ul (sortierbar1) nach ul (sortierbar2) verschoben werden. In dieser Funktion müssen Sie ein div und dann ein input type Element erstellen und dieses Element dann mit Javascript an dieses div anhängen. Sehen Sie dies für ein Beispiel für das Hinzufügen eines Eingabefeldes oder in allgemeinen divs und Elemente zu HTML mit Javascript -> https://github.com/amyth/hammer/blob/master/static/js/main.js Sehen Sie sich die Populationsfunktion an und wie Eingabeelemente zu div hinzugefügt wurden und wie ihre Eigenschaften und Attribute festgelegt wurden. –

Verwandte Themen