| Age | Commit message (Collapse) | Author |
|
is a model instance.
Thanks Carlton Gibson for reviews.
Backport of e7cdb0cd7eb5eb677af8dae7bfc6845186f861b0 from master
|
|
Backport of a12f9cd95a24573612daaf844ec97d4aed12446d from master
|
|
COUNT is more expensive than EXISTS; use the latter when possible.
|
|
Instead of loading all QuerySet results in memory, count the number of
entries. This adds an extra query when list() or tuple() is called on the
choices (because both call __len__() then __iter__()) but uses less
memory since the QuerySet results won't be cached. In most cases, the
choices will only be iterated on, meaning that __len__() won't be called
and only one query will be executed.
|
|
When __len__() is called (e.g. when casting to list or tuple), the
QuerySet is evaluated and the result cache populated. iterator()
shouldn't be called on the QuerySet after that, as it would reset the
result cache and trigger a second query.
|
|
manager.
Removing all() in __iter__() prevents a duplicate query when choices are
cast to a list and there's a prefetch_related().
|
|
|