Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #7475: fixed a possible race condition in ModelChoiceIterator. …

…Thanks, esaj.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@7710 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit e637f4723225d630e6066a04558a3549c83f8a5a 1 parent 5d09d87
@jacobian jacobian authored
Showing with 12 additions and 5 deletions.
  1. +12 −5 django/newforms/models.py
View
17 django/newforms/models.py
@@ -285,11 +285,17 @@ def __init__(self, field):
def __iter__(self):
if self.field.empty_label is not None:
yield (u"", self.field.empty_label)
- for obj in self.queryset:
- yield (obj.pk, self.field.label_from_instance(obj))
- # Clear the QuerySet cache if required.
- if not self.field.cache_choices:
- self.queryset._result_cache = None
+ if self.field.cache_choices:
+ if self.field.choice_cache is None:
+ self.field.choice_cache = [
+ (obj.pk, self.field.label_from_instance(obj))
+ for obj in self.queryset.all()
+ ]
+ for choice in self.field.choice_cache:
+ yield choice
+ else:
+ for obj in self.queryset.all():
+ yield (obj.pk, self.field.label_from_instance(obj))
class ModelChoiceField(ChoiceField):
"""A ChoiceField whose choices are a model QuerySet."""
@@ -311,6 +317,7 @@ def __init__(self, queryset, empty_label=u"---------", cache_choices=False,
Field.__init__(self, required, widget, label, initial, help_text,
*args, **kwargs)
self.queryset = queryset
+ self.choice_cache = None
def _get_queryset(self):
return self._queryset

0 comments on commit e637f47

Please sign in to comment.
Something went wrong with that request. Please try again.