diff options
| author | Adrian Holovaty <adrian@holovaty.com> | 2006-03-28 16:51:17 +0000 |
|---|---|---|
| committer | Adrian Holovaty <adrian@holovaty.com> | 2006-03-28 16:51:17 +0000 |
| commit | 1edef8ede964e5dff962b8c9a52e65717dc81fe6 (patch) | |
| tree | 840074a618b6c38a6a2edb458568c621b15ed8c6 | |
| parent | 82df62b545cff6dbd901ab3ed429d2a323765625 (diff) | |
Fixed #1548 -- Improved caching of related objects, so when clist = poll.get_choice_list(), each choice in clist has its poll cache filled. Thanks, Ned Batchelder
git-svn-id: http://code.djangoproject.com/svn/django/trunk@2574 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/core/meta/__init__.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/django/core/meta/__init__.py b/django/core/meta/__init__.py index 3de7c44b68..99849d038f 100644 --- a/django/core/meta/__init__.py +++ b/django/core/meta/__init__.py @@ -1176,7 +1176,18 @@ def method_get_related(method_name, rel_mod, rel_field, self, **kwargs): else: kwargs['%s__%s__exact' % (rel_field.name, rel_field.rel.to.pk.name)] = getattr(self, rel_field.rel.get_related_field().attname) kwargs.update(rel_field.rel.lookup_overrides) - return getattr(rel_mod, method_name)(**kwargs) + related = getattr(rel_mod, method_name)(**kwargs) + + # Cache the 'self' object for backward links. + # Example: Each choice in Poll.get_choice_list() will have its poll cache filled. + # Pre-cache the self object, for following links back. + if method_name == 'get_list': + cache_name = rel_field.get_cache_name() + for obj in related: + setattr(obj, cache_name, self) + elif method_name == 'get_object': + setattr(related, rel_field.get_cache_name(), self) + return related # Handles adding related objects. # Example: Poll.add_choice() |
