У меня есть модель, у которой есть одно поле, которое является значением ForeignKey модели, которая составляет 40 000 строк. Модель модели по умолчанию пытается создать поле выбора с 40 000 опциями, что, мягко говоря, не идеально. Тем более, когда эта модельная форма используется на фабрике для изготовления форм!raw_id_fields для modelforms
В администраторе это можно легко избежать, используя «raw_id_fields
», но похоже, что эквивалент модели не эквивалентен. Как я могу это сделать?
Вот мой ModelForm:
class OpBaseForm(ModelForm):
base = forms.CharField()
class Meta:
model = OpBase
exclude = ['operation', 'routes']
extra = 0
raw_id_fields = ('base',) #does nothing
Первая полужирная линия работает не создавая огромный громоздкий переключателя, но когда я пытаюсь сохранить Fieldset этой формы, я получаю ошибку: «OpBase. base "должен быть" базовым "экземпляром. Чтобы сохранить форму модели, «базой» должен быть базовый экземпляр. По-видимому, строковое представление базового первичного ключа недостаточно (по крайней мере, не автоматически). Мне нужен какой-то механизм для изменения строки, заданной моей формой, для экземпляра Base. И этот механизм должен работать в форме. Есть идеи? Если бы работало только raw_id_fields
, это было бы легко, как торт. Но насколько я могу судить, он доступен только в админке.
Чтобы уточнить, атрибут raw_id_field является атрибутом ModelAdmin http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields не атрибутом ModelForm. –