gotchapythondjangoModerate
Django ORM QuerySet is lazy — understanding evaluation triggers
Viewed 0 times
QuerySet lazyevaluationselect_relatedprefetch_relateddebug toolbar
Problem
Django queries execute at unexpected times or don't execute when expected. Database calls happen during template rendering instead of views.
Solution
QuerySets are lazy — no DB hit until evaluated. Triggers: iteration, slicing with step, len(), list(), bool(). Common mistakes: (1) .count() in loop instead of caching. (2) Filtering in template — use select_related/prefetch_related in view. (3) Multiple evaluations: cache with list(qs). Use django-debug-toolbar to see queries per request.
Why
Lazy evaluation lets you chain filters without hitting the database. But actual SQL runs at consumption point, which can be surprising in template loops.
Revisions (0)
No revisions yet.