From 2bc39d88e60ab9b9fa8e0b31e1af107c24cecfa6 Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Sun, 8 Jan 2006 06:04:44 +0000 Subject: [PATCH] magic-removal: Changed get_all_related_many_to_many_objects to use caching. Refs #1186. Thanks, Russ git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@1855 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/options.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/django/db/models/options.py b/django/db/models/options.py index b2c94350ae..b939fc9174 100644 --- a/django/db/models/options.py +++ b/django/db/models/options.py @@ -166,14 +166,18 @@ class Options: return follow def get_all_related_many_to_many_objects(self): - module_list = get_installed_model_modules() - rel_objs = [] - for mod in module_list: - for klass in mod._MODELS: - for f in klass._meta.many_to_many: - if f.rel and self == f.rel.to._meta: - rel_objs.append(RelatedObject(self, klass, f)) - return rel_objs + try: # Try the cache first. + return self._all_related_many_to_many_objects + except AttributeError: + module_list = get_installed_model_modules() + rel_objs = [] + for mod in module_list: + for klass in mod._MODELS: + for f in klass._meta.many_to_many: + if f.rel and self == f.rel.to._meta: + rel_objs.append(RelatedObject(self, klass, f)) + self._all_related_many_to_many_objects = rel_objs + return rel_objs def get_ordered_objects(self): "Returns a list of Options objects that are ordered with respect to this object."