optimize db usage in tagged object list
[wolnelektury.git] / src / api / handlers.py
index b81afda..827cd7c 100644 (file)
@@ -13,6 +13,7 @@ from sorl.thumbnail import default
 
 from catalogue.forms import BookImportForm
 from catalogue.models import Book, Tag, BookMedia, Fragment, Collection
+from catalogue.models.tag import prefetch_relations
 from picture.models import Picture
 from picture.forms import PictureImportForm
 
@@ -206,8 +207,9 @@ class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails):
         if daisy:
             books = books.filter(media__type='daisy').distinct()
 
-        books = books.only('slug', 'title', 'cover')
-
+        books = books.only('slug', 'title', 'cover', 'cover_thumb')
+        for category in book_tag_categories:
+            books = prefetch_relations(books, category)
         if books:
             return books
         else:
@@ -251,7 +253,7 @@ def _tags_getter(category):
 def _tag_getter(category):
     @classmethod
     def get_tag(cls, book):
-        return ', '.join(book.tags.filter(category=category).values_list('name', flat=True))
+        return book.tag_unicode(category)
     return get_tag