Recently I found the
only()
method of a queryset which can significantly improve the loading speed of forms with
ModelChoiceField
or
ModelMultipleChoiceField
.
Let's say we have a big Event model with thousands of instances:
class Event(models.Model):
title = models.CharField(_("Title"), max_length=200)
# ... lots of other fields ...
def __unicode__(self):
return self.title
Then we have a form with
ModelMultipleChoiceField
:
class EventForm(forms.Form):
related_events = forms.ModelMultipleChoiceField(
queryset=Event.objects.all().only("id", "title"),
label=_("Related Events"),
required=False,
)
# ... other fields of the form ...
The used
only()
method loads only the primary key and the title for the selection widget.