Django Äquivalent von PHP Form Wert Array / assoziative Array
Frage
In PHP, ich würde das tun name
als Array zu erhalten.
<input type"text" name="name[]" />
<input type"text" name="name[]" />
Oder wenn ich wollte name
als assoziatives Array erhalten:
<input type"text" name="name[first]" />
<input type"text" name="name[last]" />
Was ist das Django Äquivalent für solche Dinge?
Lösung
Überprüfen Sie die QueryDict Dokumentation , besonders die Verwendung von QueryDict.getlist(key)
.
Da request.POST und request.GET in der Ansicht sind Instanzen von QueryDict, könnten Sie dies tun:
<form action='/my/path/' method='POST'>
<input type='text' name='hi' value='heya1'>
<input type='text' name='hi' value='heya2'>
<input type='submit' value='Go'>
</form>
Dann etwas wie folgt aus:
def mypath(request):
if request.method == 'POST':
greetings = request.POST.getlist('hi') # will be ['heya1','heya2']
Andere Tipps
Sorry für diese ausgrub, aber Django hat eine utils.datastructures.DotExpandedDict. Hier ist ein Stück von ihm ist docs:
>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], \
'person.1.lastname': ['Willison'], \
'person.2.firstname': ['Adrian'], \
'person.2.lastname': ['Holovaty']})
>>> d
{'person': {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}}
Der einzige Unterschied ist, Sie dot anstelle von Klammern.
EDIT: Dieser Mechanismus wird durch Form Präfixe ersetzt wurde, aber hier ist der alte Code, den Sie in Ihrer App fallen können, wenn Sie noch dieses Konzept verwenden möchten: https://gist.github.com/grzes/73142ed99dc8ad6ac4fc9fb9f4e87d60
Django bietet keine Möglichkeit, assoziative Arrays (Wörterbücher in Python) vom Request-Objekt. Wie die erste Antwort darauf hingewiesen, können Sie .getlist()
nach Bedarf verwenden oder eine Funktion schreiben, die ein QueryDict
nehmen und neu zu organisieren es nach Ihren Wünschen (Herausziehen Schlüssel / Wert-Paare, wenn der Schlüssel einig key[*]
Muster übereinstimmt, zum Beispiel).