diff options
| author | Brian Rosner <brosner@gmail.com> | 2008-06-23 21:05:02 +0000 |
|---|---|---|
| committer | Brian Rosner <brosner@gmail.com> | 2008-06-23 21:05:02 +0000 |
| commit | 420f19aa353ee6568c93f34dfe2e6eef24bc528d (patch) | |
| tree | 12f182ec4f958ac08a57f05786fdbefabae9910c /django/newforms | |
| parent | c929440fcd001b97b805f2229fb85deae3f86e05 (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.py | 17 |
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 |
