我有一個模型,其中一個字段是一個ForeignKey值,它的模型爲40,000行。默認的模型形式嘗試創建一個包含40,000個選項的選擇框,至少可以說是不理想的。當這個模型在一個formset工廠中使用時更是如此!raw_id_fields for 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
第一加粗線的工作原理是不是創造了巨大笨重的選擇框,但是當我試圖挽救這種形式的一個字段,我得到的錯誤:「OpBase。基地「必須是」基地「的實例。爲了保存模型,'base'需要是Base實例。顯然,基本主鍵的字符串表示是不夠的(至少不會自動)。我需要某種機制將給定我的表單的字符串更改爲Base實例。而這個機制必須在formset中工作。有任何想法嗎?如果只有raw_id_fields
可以起作用,那麼這就像蛋糕一樣容易。但據我所知,它只能在管理員中使用。
只是爲了澄清,raw_id_field屬性是ModelAdmin屬性http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields不是ModelForm屬性。 – 2011-02-09 08:22:30