tengo un my_forms.py Django así:opciones de descanso bajo la forma de Django
class CarSearchForm(forms.Form):
# lots of fields like this
bodystyle = forms.ChoiceField(choices=bodystyle_choices())
Cada elección es, por ejemplo, ("Saloon", "Saloon (15 autos)"). Entonces las elecciones son calculadas por esta función.
def bodystyle_choices():
return [(bodystyle.bodystyle_name, '%s (%s cars)' %
(bodystyle.bodystyle_name, bodystyle.car_set.count()))
for bodystyle in Bodystyle.objects.all()]
Mi problema es que las funciones de opciones se ejecutan cada vez que me limito a importar my_forms.py. Creo que esto se debe a la forma en que Django declara sus campos: en la clase pero no en un método de clase. Lo cual está bien, pero mi views.py importa my_forms.py para que las búsquedas de opciones se realicen en cada solicitud, sin importar qué vista se use.
pensé que tal vez poniendo opciones = bodystyle_choices sin soporte funcionaría, pero me sale:
'function' object is not iterable
Obviamente puede utilizar el almacenamiento en caché y poner los "my_forms importación" por si las funciones de vista necesarios, pero que no lo hace cambie el punto principal: ¡mis elecciones deben ser perezosas!
Definitivamente la solución superior, esta debería ser la respuesta aceptada imo. –
/agree es la solución más limpia que he visto hasta ahora y le permite saltear problemas con las validaciones, una diferencia importante con respecto a ModelChoiceField. – Hassek
Esto no parece funcionar, al menos con Django 1.6, porque 'ChoiceField._set_choices' hace' self._choices = self.widget.choices = list (value) ' – spookylukey