diff options
| author | Tim Graham <timograham@gmail.com> | 2015-10-05 19:25:21 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-10-05 19:25:21 -0400 |
| commit | de570d4da9447ebef253519c2473d3b4f6fb2bea (patch) | |
| tree | 3775d0bb8ec7504efe2274c0eb08e8cd04de5e29 /django/forms/models.py | |
| parent | bf42888801e927104b7f116df48bacbbda826113 (diff) | |
[1.8.x] Fixed #25496 -- Made ModelChoiceField respect prefetch_related().
Backport of 6afa6818fcf25665bbf61f0921c8c8c6fa8f223e from master
Diffstat (limited to 'django/forms/models.py')
| -rw-r--r-- | django/forms/models.py | 6 |
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): |
