summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
authorFrançois Freitag <mail@franek.fr>2018-02-23 21:12:09 -0800
committerTim Graham <timograham@gmail.com>2018-03-01 14:17:56 -0500
commita2e97abd8149e78071806a52282a24c27fe8236b (patch)
tree591c60e6446313d2b02a8abbbbd57ed132e014c0 /django/forms
parent40f0aa988571431508a508f4fac5ba94c6443f5c (diff)
Fixed #29159 -- Made ModelChoiceIterator reuse QuerySet result cache.
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.
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/models.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index 8134cf3de3..414a9eafe4 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -1132,7 +1132,7 @@ class ModelChoiceIterator:
yield ("", self.field.empty_label)
queryset = self.queryset
# Can't use iterator() when queryset uses prefetch_related()
- if not queryset._prefetch_related_lookups:
+ if not queryset._prefetch_related_lookups and queryset._result_cache is None:
queryset = queryset.iterator()
for obj in queryset:
yield self.choice(obj)