He estado escaneando a través de la documentación de Django, y los resultados de búsqueda de Google, toda la tarde y todavía estoy algo atrapado en mi intento de crear un formulario dinámico. Espero que solo necesite que alguien me empuje en la dirección correcta :-) Estoy empezando a aprender Django, así que todavía soy un principiante; sin embargo, ya soy un usuario intermedio de Python.formas dinámicas de Django - ¿población de campo sobre la marcha?
Lo que intento hacer es crear un formulario dinámico, donde el usuario haga una selección de un menú desplegable, y basado en esa selección, otra parte del formulario se actualizará automáticamente para mostrar los resultados relevantes para el actual elemento seleccionado, pero desde otra tabla de base de datos.
Voy a tratar de utilizar una versión simplificada de los modelos de la tutorial de Django para ilustrar mejor lo que estoy tratando de hacer:
# models.py
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
lo que permite decir que quiero tener algo así como un desplegable abajo del campo de selección, rellenado con la pregunta de cada encuesta en la base de datos. También quiero tener un campo de texto, que muestre las opciones correspondientes para la Encuesta actualmente seleccionada, que se actualizará sobre la marcha siempre que el usuario seleccione una agrupación diferente. Pude resolver esto colocando un botón y volviendo a publicar información en el formulario; Sin embargo, estoy tratando de hacer esto automáticamente a medida que el usuario hace una selección. Mi punto de vista especie de ve algo como esto en la actualidad
#view.py
from django import forms
from django.shortcuts import render_to_response
from myapp.models import Poll,Choice
class MyModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "%s" % obj.question
class PollSelectionForm(forms.Form):
polls = MyModelChoiceField(queryset=Poll.objects.all())
class ChoiceResults(forms.Form):
def __init__(self, newid, *args, **kwargs):
super(ChoiceResults, self).__init__(*args, **kwargs)
self.fields['choice'] = forms.TextField(initial="")
def main(request):
return render_to_response("myapp/index.html", {
"object": PollSelectionForm(),
"object2": ChoiceResults(),
})
mi plantilla es muy simple, sólo algo así como
{{ object }}
{{ object2 }}
Estoy seguro que la forma en que voy sobre la creación de las formas es probablemente tampoco sea el mejor, así que no dude en criticarlo también :-) Como mencioné, he leído soluciones que implican volver a publicar el formulario, pero quiero que esto ocurra sobre la marcha ... si puedo volver a publicar de forma transparente entonces eso estaría bien, supongo. También he visto bibliotecas que te permitirán crear formularios dinámicamente, pero eso simplemente parece exagerado.
Es necesario ajax si quieres que esto suceda de forma automática y sin una actualización del navegador - una vista necesita tomar forma de entrada y responder con contenidos que JavaScript puede leer y reemplazar el elemento html en su formar. –