2012-11-28 17 views
9

Ho bisogno di un campo per il modulo Django che prenderà un elenco di stringhe.Campo forma Django per un elenco di stringhe

I'll iterare su questo elenco e creare un nuovo oggetto modello per ogni stringa.

non posso fare un modello a scelta multipla Campo, perché gli oggetti del modello non vengono creati fino dopo modulo di presentazione, e non posso fare una multipla campo Scelta, perché ho bisogno di accettare stringhe arbitrarie, non solo una serie di opzioni predefinite.

Qualcuno sa come fare?

risposta

0

Ho trovato una soluzione, un po 'hacky ma funziona per ora.

Dopo aver preso i dati del modulo, ho Stash l 'elenco in una variabile:
event_locations = form_data.get('event_locations', None)

Poi ho rimuoverlo dal form_data, così la forma Django non ha l'elenco:

if event_locations: 
    del form_data['event_locations'] 

ho un'istanza di il mio modulo con form_data e gestisce l'elenco separatamente:

f = NewEventForm(form_data) 
... 
for loc in event_locations: 
    #create new models here 

Mi rendo conto che questo non è diretto risolvo la domanda che ho posto, perché non abbiamo ancora un campo di Django Form che prende una lista, ma è un modo per passare in una lista a una vista che prende una forma e che è in grado di gestirla.

5

Basta usare un campo di testo normale delimitato da virgole. Dopo aver gestito l'invio del modulo nella vista, eseguire una divisione della stringa di virgola basata su quel campo. Quindi scorrere su ciascuno di essi creando e salvando un nuovo modello. Non dovrebbe essere troppo difficile.

+0

Ho considerato questo, ma sarebbe una rottura piuttosto grande con la convenzione nella mia API. –

Problemi correlati