è possibile impostare un campo nascosto per avere il valore reale "stato", quindi utilizzare jQuery per creare l'elenco <select>
e, .select()
, copiare il suo valore per il campo nascosto. Quindi, al caricamento della pagina, il tuo codice jQuery può recuperare il valore del campo nascosto e usarlo per selezionare l'elemento giusto nell'elemento dopo che è stato popolato.
Il concetto chiave qui è che il menu a comparsa Stato è una fiction creata interamente in jQuery e non fa parte del modulo Django. Questo ti dà il pieno controllo su di esso, lasciando che tutti gli altri campi funzionino normalmente.
EDIT: C'è un altro modo per farlo, ma non usa le classi di forma di Django.
Nella vista:
context = {'state': None, 'countries': Country.objects.all().order_by('name')}
if 'country' in request.POST:
context['country'] = request.POST['country']
context['states'] = State.objects.filter(
country=context['country']).order_by('name')
if 'state' in request.POST:
context['state'] = request.POST['state']
else:
context['states'] = []
context['country'] = None
# ...Set the rest of the Context here...
return render_to_response("addressform.html", context)
Poi nel modello:
<select name="country" id="select_country">
{% for c in countries %}
<option value="{{ c.val }}"{% ifequal c.val country %} selected="selected"{% endifequal %}>{{ c.name }}</option>
{% endfor %}
</select>
<select name="state" id="select_state">
{% for s in states %}
<option value="{{ s.val }}"{% ifequal s.val state %} selected="selected"{% endifequal %}>{{ s.name }}</option>
{% endfor %}
</select>
avrete anche bisogno del solito JavaScript per ricaricare il selettore stati quando il paese è cambiato.
Non ho provato questo, quindi probabilmente ci sono un paio di buchi, ma dovrebbe dare l'idea.
Così le scelte sono:
- utilizzare un campo nascosto nel modulo Django per il valore reale e hanno i selezionare i menu creati sul lato client tramite la tecnologia AJAX, o
roba Modulo di
- Ditch Django e inizializzare il menu te stesso.
- Creare un custom Django form widget, che non ho fatto e quindi non commenterò. Non ho idea se sia fattibile, ma sembra che avrai bisogno di un paio
Select
s in un MultiWidget
, quest'ultimo non documentato nei documenti regolari, quindi dovrai leggere il codice sorgente.
fonte
2010-07-13 03:03:07
provare questo https://github.com/digi604/django-smart-selects/ –