summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2015-10-05 19:25:21 -0400
committerTim Graham <timograham@gmail.com>2015-10-05 19:25:21 -0400
commitde570d4da9447ebef253519c2473d3b4f6fb2bea (patch)
tree3775d0bb8ec7504efe2274c0eb08e8cd04de5e29 /django/forms
parentbf42888801e927104b7f116df48bacbbda826113 (diff)
[1.8.x] Fixed #25496 -- Made ModelChoiceField respect prefetch_related().
Backport of 6afa6818fcf25665bbf61f0921c8c8c6fa8f223e from master
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/models.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index 2137e9f4a6..1036e9b288 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -1092,15 +1092,17 @@ class ModelChoiceIterator(object):
def __iter__(self):
if self.field.empty_label is not None:
yield ("", self.field.empty_label)
+ method = 'all' if self.queryset._prefetch_related_lookups else 'iterator'
+ queryset = getattr(self.queryset, method)
if self.field.cache_choices:
if self.field.choice_cache is None:
self.field.choice_cache = [
- self.choice(obj) for obj in self.queryset.iterator()
+ self.choice(obj) for obj in queryset()
]
for choice in self.field.choice_cache:
yield choice
else:
- for obj in self.queryset.iterator():
+ for obj in queryset():
yield self.choice(obj)
def __len__(self):