Tagged view optimization.
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 31 Jul 2013 15:01:06 +0000 (17:01 +0200)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 31 Jul 2013 15:01:06 +0000 (17:01 +0200)
apps/catalogue/models/book.py
apps/catalogue/views.py

index e80b8af..d69cf2a 100644 (file)
@@ -75,7 +75,7 @@ class Book(models.Model):
 
         self.sort_key = sortify(self.title)
 
-        ret = super(Book, self).save(force_insert, force_update)
+        ret = super(Book, self).save(force_insert, force_update, **kwargs)
 
         if reset_short_html:
             self.reset_short_html()
@@ -511,10 +511,11 @@ class Book(models.Model):
         """
         # get relevant books and their tags
         objects = cls.tagged.with_all(tags)
+        parents = objects.filter(html_file='').only('slug')
         # eliminate descendants
         l_tags = Tag.objects.filter(category='book',
-            slug__in=[book.book_tag_slug() for book in objects.iterator()])
-        descendants_keys = [book.pk for book in cls.tagged.with_any(l_tags).iterator()]
+            slug__in=[book.book_tag_slug() for book in parents.iterator()])
+        descendants_keys = [book.pk for book in cls.tagged.with_any(l_tags).only('pk').iterator()]
         if descendants_keys:
             objects = objects.exclude(pk__in=descendants_keys)
 
index d69e542..e9b1465 100644 (file)
@@ -186,7 +186,7 @@ def tagged_object_list(request, tags=''):
         # get related tags from `tag_counter` and `theme_counter`
         related_counts = {}
         tags_pks = [tag.pk for tag in tags]
-        for book in objects.iterator():
+        for book in objects:
             for tag_pk, value in itertools.chain(book.tag_counter.iteritems(), book.theme_counter.iteritems()):
                 if tag_pk in tags_pks:
                     continue