2011-08-27 35 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))