diff options
| author | François Freitag <mail@franek.fr> | 2018-02-23 21:12:09 -0800 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-03-01 14:17:56 -0500 |
| commit | a2e97abd8149e78071806a52282a24c27fe8236b (patch) | |
| tree | 591c60e6446313d2b02a8abbbbd57ed132e014c0 /django/forms | |
| parent | 40f0aa988571431508a508f4fac5ba94c6443f5c (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.py | 2 |
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) |
