Nips
Nips

Reputation: 13870

How to increase performance for forms?

I have form:

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', ....)

but... In the articles table is 10 000 records... Form isn't opened, browser loads data forever.

What happens? Is the ModelChoiceField retrieves all data from a table?

How to fix it?

Upvotes: 1

Views: 207

Answers (1)

Sam Starling
Sam Starling

Reputation: 5378

If you've got 10,000 records belonging to your Article model, then the queryset you're passing to ModelChoiceField will mean that it contains 10,000 items.

The simple solution is to restrict that queryset to contain only what you actually need: does the form need to contain every single article?

Long story short, see if you can restrict the query in any way, i.e.:

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

Upvotes: 2

Related Questions