summaryrefslogtreecommitdiff
path: root/django/newforms
diff options
context:
space:
mode:
authorBrian Rosner <brosner@gmail.com>2008-06-23 21:05:02 +0000
committerBrian Rosner <brosner@gmail.com>2008-06-23 21:05:02 +0000
commit420f19aa353ee6568c93f34dfe2e6eef24bc528d (patch)
tree12f182ec4f958ac08a57f05786fdbefabae9910c /django/newforms
parentc929440fcd001b97b805f2229fb85deae3f86e05 (diff)
newforms-admin: Merged from trunk up to [7729].
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7730 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/newforms')
-rw-r--r--django/newforms/models.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/django/newforms/models.py b/django/newforms/models.py
index e515071162..3117abbafe 100644
--- a/django/newforms/models.py
+++ b/django/newforms/models.py
@@ -483,11 +483,17 @@ class ModelChoiceIterator(object):
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."""
@@ -509,6 +515,7 @@ class ModelChoiceField(ChoiceField):
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