Browse Source

Better cache

Rafał Pitoń 11 years ago
parent
commit
d32b09c5aa
1 changed files with 9 additions and 6 deletions
  1. 9 6
      misago/models/threadprefixmodel.py

+ 9 - 6
misago/models/threadprefixmodel.py

@@ -12,12 +12,15 @@ class ThreadPrefixManager(models.Manager):
         cache.delete('threads_prefixes')
 
     def make_cache(self):
-        raw_prefixes = cache.get('threads_prefixes', 'nada')
-        if raw_prefixes == 'nada':
-            raw_prefixes = [p for p in ThreadPrefix.objects.prefetch_related().order_by('name')]
-            cache.set('threads_prefixes', raw_prefixes, None)
+        prefixes = cache.get('threads_prefixes', 'nada')
+        if prefixes == 'nada':
+            prefixes = []
+            for prefix in ThreadPrefix.objects.order_by('name').iterator():
+                prefix.forums_pks = [f.pk for f in prefix.forums.iterator()]
+                prefixes.append(prefix)
+            cache.set('threads_prefixes', prefixes, None)
         dict_result = SortedDict()
-        for prefix in raw_prefixes:
+        for prefix in prefixes:
             dict_result[prefix.pk] = prefix
         return dict_result
 
@@ -31,7 +34,7 @@ class ThreadPrefixManager(models.Manager):
     def forum_prefixes(self, forum):
         forum_prefixes = []
         for prefix in self.all_prefixes().values():
-            if forum in prefix.forums.all():
+            if forum.pk in prefix.forums_pks:
                 forum_prefixes.append((prefix.pk, prefix))
         return SortedDict(forum_prefixes)