Puede establecer un campo oculto para tener el valor de "estado" real, luego use jQuery para crear la lista <select>
y, en .select()
, copie su valor en el campo oculto. Luego, al cargar la página, su código jQuery puede recuperar el valor del campo oculto y usarlo para seleccionar el elemento correcto en el elemento <select>
después de que se haya rellenado.
El concepto clave aquí es que el menú emergente de estado es una ficción creada completamente en jQuery y no forma parte de la forma Django. Esto le da un control total sobre él, al tiempo que permite que todos los otros campos funcionen normalmente.
EDITAR: Hay otra forma de hacerlo, pero no utiliza las clases de formulario de Django.
En la 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)
Luego, en la plantilla:
<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>
también necesitará el código JavaScript habitual para volver a cargar el selector de estados cuando se cambia el país.
No he probado esto, por lo que probablemente haya un par de agujeros en él, pero debería transmitir la idea.
Así que sus opciones son:
- utilizar un campo oculto en el formulario de Django para el valor real y tienen los selectos menús creados en el cliente a través de AJAX, o
cosas Formulario de
- Zanja Django e inicializar el menús usted mismo.
- Crea un custom Django form widget, que no he hecho y por lo tanto no comentaré. No tengo idea si esto es factible, pero parece que necesitarás un par de
Select
s en un MultiWidget
, este último no está documentado en los documentos normales, por lo que tendrás que leer la fuente.
prueba este https://github.com/digi604/django-smart-selects/ –