2009-07-25 12 views
2

Ein einfaches Formular mit ModelChoiceField, das als Optionsfeld angezeigt wird (das geerbte Widget).Django, Einstellung ausgewählt = "ausgewählt" an einem Funkeingang

ich ein OnChange-Ereignis zu POST bin mit, jedes Mal wenn ein Benutzer ein Optionsfeld:

shipping_choice = ShippingChoiceField(
    queryset=ShippingMethods.objects.all(), 
    empty_label=None, 
    widget=forms.RadioSelect(attrs={ 
     'class': 'order', 
     'onchange': '$("#shipping_choice").submit()', 
    }) 
) 

Ich brauche das Radio haben, dass der Benutzer Gedanken ausgewählt, tatsächlich „ausgewählt“ werden, wenn die Seite neu geladen .

Hinzufügen eines zusätzlichen Attributs 'ausgewählt', wird nicht ausgeführt, weil es passieren muss, wenn der Benutzer tatsächlich zuerst eine Auswahl getroffen hat.

Antwort

2

Formulare haben ein initial Attribut, das Sie verwenden können: wieder

form = YourForm(initial={'shipping_choice': current_choice}) 

Dann vermute ich Dir ein ModelForm verwenden, wobei in diesem Fall muss nur die Instanz sein soll vorbei:

form = YourForm(instance=order) # where "order" is your instance... 

Oder vielleicht nur verstehen Sie nicht, dass ein Formular an Daten gebunden werden kann:

if request.method == 'POST': 
    order_form = YourForm(data=request.POST) 
else: 
    order_form = YourForm() 
+0

Hey Kumpel, Nein, ich benutze kein ModelForm, dies ist ein Pre-Check-Formular, das nur überprüft, um eine shipping_method (die Bestellung wird im nächsten Schritt erstellt, denn alle Informationen sind in die Sitzung). Ich bin mir nicht sicher, erste wird den Trick tun, denn ist es nicht nur für die anfängliche Anzeige gedacht? Kann es jedes Mal dynamisch eingestellt werden, wenn ein Benutzer ein anderes Radio auswählt und das Formular erneut sendet? – panosl

+0

Auch nicht sicher, wie die current_choice gesetzt wird, da ich das Formular instanziieren muss, um den übergebenen Wert zu erhalten. – panosl

+0

Ich habe meine Antwort so bearbeitet, dass sie einen Abschnitt darüber enthält, wie Sie ein Formular an Daten binden. Ohne zu versuchen, herablassend zu klingen, haben Sie http://docs.djangoproject.com/en/dev/ref/forms/api/#ref-forms-api gelesen? – SmileyChris

0

Ihre Frage und der nachfolgende Kommentar sind leider nicht klar. Was meinst du damit, wenn es angezeigt wird, wenn das Formular erneut gesendet wird?

Normalerweise wird der Ablauf das Formular anzeigen, senden, erneut anzeigen, wenn Fehler vorhanden sind, und dann zu einer Bestätigungsseite wechseln. An welchem ​​Punkt hast du Probleme? Oder unterscheidet sich Ihr Flow signifikant davon?

+0

Es tut uns leid, wenn es unklar war. Das Formular zeigt eine Liste der Versandoptionen an. Diese variieren je nach Land des Kunden. Diese Filterung findet im __init__ des Formulars statt. Die Übermittlung findet nur statt, die Neuberechnung kann stattfinden und die neue Summe dem Benutzer anzeigen, deshalb rufe ich beim "onchange" -Ereignis an. Das funktioniert gut, außer das Radio, das tatsächlich ausgewählt wurde, wird nicht so (ausgewählt) angezeigt, wenn die Ansicht zurückkehrt (die Ansicht verarbeitet das Formular und zeigt es erneut an). – panosl

Verwandte Themen