Tengo problemas para entender cómo crear un campo de elección dinámico en django. Tengo un modelo configurado como:
class rider(models.Model):
user = models.ForeignKey(User)
waypoint = models.ManyToManyField(Waypoint)
class Waypoint(models.Model):
lat = models.FloatField()
lng = models.FloatField()
Lo que intento hacer es crear un campo de elección cuyos valores sean los puntos de ruta asociados con ese corredor (que sería la persona que inició sesión).
Actualmente estoy anulando init en mis formularios de esta manera:
class waypointForm(forms.Form):
def __init__(self, *args, **kwargs):
super(joinTripForm, self).__init__(*args, **kwargs)
self.fields['waypoints'] = forms.ChoiceField(choices=[ (o.id, str(o)) for o in Waypoint.objects.all()])
Pero todo lo que hace es enumerar todos los puntos de referencia, no están asociados con ningún piloto en particular. ¿Algunas ideas? Gracias.
python
django
django-forms
django-templates
que que
fuente
fuente
CheckboxSelectMultiple
widget con esto, querrás usarMultipleChoiceField
oModelMultipleChoiceField
. Al principio, parece funcionarChoiceField
, pero las partes internas se romperán cuando intentes guardar el formulario.CheckboxSelectMultiple
widget con este código. Asegúrese de cambiarChoiceForm
aMultipleChoiceForm
Hay una solución integrada para su problema: ModelChoiceField .
En general, siempre vale la pena intentar usarlo
ModelForm
cuando necesita crear / cambiar objetos de base de datos. Funciona en el 95% de los casos y es mucho más limpio que crear su propia implementación.fuente
el problema es cuando lo haces
en una solicitud de actualización, se perderá el valor anterior!
fuente
¿Qué le parece pasar la instancia del piloto al formulario mientras lo inicializa?
fuente
Debajo solución de trabajo con campo de elección normal. mi problema es que cada usuario tiene sus propias opciones de campo de elección PERSONALIZADAS basadas en pocas condiciones
fuente
Como señalaron Breedly y Liang, la solución de Ashok le impedirá obtener el valor seleccionado al publicar el formulario.
Una forma ligeramente diferente, pero aún imperfecta, de resolver eso sería:
Sin embargo, esto podría causar algunos problemas de concurrencia.
fuente
Puede declarar el campo como un atributo de primera clase de su formulario y simplemente establecer opciones dinámicamente:
También puede usar un ModelChoiceField y establecer el conjunto de consultas en init de manera similar.
fuente
Si necesita un campo de elección dinámica en django admin; Esto funciona para django> = 2.1.
Espero que esto ayude.
fuente