Domanda

In PHP, lo farei per ottenere name come array.

<input type"text" name="name[]" />
<input type"text" name="name[]" />

O se volessi ottenere name come array associativo:

<input type"text" name="name[first]" />
<input type"text" name="name[last]" />

Qual è l'equivalente di Django per tali cose?

È stato utile?

Soluzione

Consulta la documentazione di QueryDict , in particolare l'utilizzo di QueryDict.getlist ( chiave) .

Poiché request.POST e request.GET nella vista sono istanze di QueryDict, è possibile eseguire questa operazione:

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

Quindi qualcosa del genere:

def mypath(request):
    if request.method == 'POST':
        greetings = request.POST.getlist('hi') # will be ['heya1','heya2']

Altri suggerimenti

Ci scusiamo per averlo scoperto, ma Django ha un utils.datastructures.DotExpandedDict. Ecco un pezzo dei suoi documenti:

>>> 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']}}}

L'unica differenza è che usi punti anziché parentesi.

EDIT: questo meccanismo è stato sostituito dai prefissi del modulo, ma ecco il vecchio codice che puoi rilasciare nella tua app se vuoi ancora usare questo concetto: https://gist.github.com/grzes/73142ed99dc8ad6ac4fc9fb9f4e87d60

Django non fornisce un modo per ottenere array associativi (dizionari in Python) dall'oggetto richiesta. Come sottolineato dalla prima risposta, puoi usare .getlist () secondo necessità, oppure scrivere una funzione che può prendere un QueryDict e riorganizzarlo a tuo piacimento (estraendo il tasto / value se la chiave corrisponde ad un modello key [*] , ad esempio).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top