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?

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top