2011-08-27 73 views
1

我有形式:如何提高表單的性能?

class AdmItemForm(forms.ModelForm): 
    id = forms.ModelChoiceField(queryset=Article.objects.all(), widget=forms.HiddenInput()) 
    mainimage = forms.ImageField(widget=AdmImageWidget(), required=False) 
    tags = TagField(required=False) 
    ..... 

class Meta: 
    model = Article 
    fields = ('id', 'category', 'date', ....) 

但......在文章表是10 000條記錄...表格沒有打開,瀏覽器加載的數據永遠。

會發生什麼? ModelChoiceField是從表中檢索所有數據嗎?

如何解決?

回答

2

如果您擁有屬於您的Article模型的10,000條記錄,那麼您傳遞給ModelChoiceField的查詢集將表示它包含10,000個條目。

簡單的解決方案是限制該查詢集僅包含實際需要的內容:表單是否需要包含每一篇文章?

長話短說,看你能不能以任何方式限制的查詢,即:

id = forms.ModelChoiceField(queryset=Article.objects.\ 
    filter(published=True))