2017-03-21 1 views
0

Ich mache ein RSVP-Formular, wo der Eingeladene entscheiden kann, einen Gast (oder 2 oder 3) zu bringen. Das Formular enthält x-mal eingegebene Eingaben, wobei x die Anzahl der Gäste ist, die der Benutzer einstellt. Wenn der Benutzer zum Beispiel "0" aus dem Dropdown wählt, bringt er keinen Gast mit, so dass das Formular nur Eingaben für 1 Person (sich selbst) enthält. Wenn sie "1" aus der Dropdown-Liste auswählen, dupliziert das Formular alle Felder, aber es gibt immer noch nur eine Route/eine Senden-Schaltfläche. Die duplizierten Formularfelder sind identisch mit dem Original, so dass die Form hat zwei Eingänge dem Namen „name“, 2 Eingänge Namen „Abendessen“ usw.JSON mit Schlüssel-Wert-Wert (django/python) analysieren

ich ein Wörterbuch, wenn ich request.POST drucken:

<QueryDict: {u'restrictions': [u'None', u'Gluten'], u'name': [u'Krista', u'Joel'], u'dinner': [u'chicken', u'fish'], u'csrfmiddlewaretoken': [u'iEjxo6KgLGHZWwvaxEd6I7CUd7GTs89VGpiKwmiCP9xqXKFK096s0vboK4pPQxea']}> 

In Vanille python kann ich die Werte zugreifen wie so:

dictionary['restrictions'][1] 

die "Gluten" zurückgibt. Aber in Django gibt dieser Ausdruck 'e' - den Buchstaben bei Index 1 des Schlüsselnamens 'restrictions' zurück. Ebenso

for key, val1, val2 
    print key, val1, val2 

gibt „zu viele Werte entpacken“, vermutlich, weil es die Buchstaben in dem Schlüsselnamen anstelle der Werte Auspacken.

Wie kann ich auf die Werte zugreifen? Gibt es alternativ eine bessere Möglichkeit, mehrere Formulare basierend auf der Auswahl des Benutzers zu erstellen, mit nur einer Route und einer Schaltfläche zum Senden?

+0

versuchen Was ist die Ausgabe von 'request.POST [ 'Einschränkungen']'? Es sollte eine Liste sein, aber aus irgendeinem Grund sieht es so aus, als wäre es eine Zeichenkette. Wie greifen Sie auf das Wörterbuch 'request.POST ['restrictions'] [1]'? –

+0

@ J.McBride die Ausgabe von request.POST ['Einschränkungen'] ist "Gluten", und request.POST ['Name'] ist "Joel". Es gibt also nur den letzten Wert für jeden Schlüssel zurück. Ja, request.POST ['restrictions'] [0] gibt 'r' zurück und [1] gibt 'e' zurück - damit wird der Buchstabe an diesen Indizes für das Wort ['restrictions'] zurückgegeben. –

Antwort

1

sollten Sie request.POST.getlist('restrictions')

+0

Ja! Das funktioniert. Danke Danke! –