Skip to content

Commit abb4174

Browse files
committed
ContentProxy: Do not regenerate Media class on every access
1 parent 94265b4 commit abb4174

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

feincms/models.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from django.db.models import Q
1515
from django.db.models.fields import FieldDoesNotExist
1616
from django.db.models.loading import get_model
17+
from django.forms.widgets import Media
1718
from django.template.loader import render_to_string
1819
from django.utils.datastructures import SortedDict
1920
from django.utils.encoding import force_unicode
@@ -139,6 +140,7 @@ def __init__(self, item):
139140

140141
self.item = item
141142
self.content_type_instances = self._fetch_content_type_instances(item)
143+
self.media_cache = None
142144

143145
def _fetch_content_type_counts(self, item, regions=None):
144146
tmpl = 'SELECT %d AS ct_idx, COUNT(id) FROM %s WHERE parent_id=%s'
@@ -220,18 +222,18 @@ def __getattr__(self, attr):
220222
instances = self.__dict__['content_type_instances']
221223
return instances.get(attr, [])
222224

223-
224225
def _get_media(self):
225-
from django.forms.widgets import Media
226-
media = Media()
226+
if self.media_cache is None:
227+
media = Media()
227228

228-
instances = self.__dict__['content_type_instances']
229-
for contents in instances.values():
230-
for content in contents:
231-
if hasattr(content, 'media'):
232-
media = media + content.media
229+
instances = self.__dict__['content_type_instances']
230+
for contents in instances.values():
231+
for content in contents:
232+
if hasattr(content, 'media'):
233+
media = media + content.media
233234

234-
return media
235+
self.media_cache = media
236+
return self.media_cache
235237
media = property(_get_media)
236238

237239

0 commit comments

Comments
 (0)