Tengo un modelo que tiene un campo que es un valor ForeignKey para un modelo que tiene 40,000 filas. La forma de modelo predeterminada intenta crear un cuadro de selección con 40,000 opciones, que, por decir lo menos, no es ideal. ¡Aún más cuando este modelo se usa en una fábrica de formset!raw_id_fields for modelforms
En el administrador, esto es fácilmente evitable mediante el uso de "raw_id_fields
", pero no parece haber un equivalente de modelo. ¿Cómo puedo hacer esto?
Aquí es mi ModelForm:
class OpBaseForm(ModelForm):
base = forms.CharField()
class Meta:
model = OpBase
exclude = ['operation', 'routes']
extra = 0
raw_id_fields = ('base',) #does nothing
La primera línea en negrita funciona al no crear la enorme caja de selección difícil de manejar, pero cuando trato de guardar un conjunto de campos de este formulario, me sale el error: "OpBase. la base "debe ser una instancia" Base ". Para que se guarde el modelo, 'base' debe ser una instancia Base. Aparentemente, una representación de cadena de una clave primaria Base no es suficiente (al menos no automáticamente). Necesito algún tipo de mecanismo para cambiar la cadena que se le da a la forma, a una instancia de Base. Y este mecanismo tiene que funcionar en un formset. ¿Algunas ideas? Si solo raw_id_fields
funciona, esto sería fácil como un pastel. Pero hasta donde puedo decir, solo está disponible en el administrador.
Solo para aclarar, el atributo raw_id_field es un atributo ModelAdmin http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields no es un atributo de ModelForm. –