fix
[wolnelektury.git] / src / search / views.py
index e06b1cc..5acbffa 100644 (file)
@@ -85,15 +85,19 @@ def hint(request, mozhint=False, param='term'):
         for author in authors[:limit]
     ]
     if len(data) < limit:
-        data += [
-            {
-                'label': b.title,
-                'author': b.author_unicode(),
-                'id': b.id,
-                'url': b.get_absolute_url()
-            }
-            for b in Book.objects.filter(findable=True, title__iregex='\m' + prefix)[:limit-len(data)]
-        ]
+        for b in Book.objects.filter(findable=True, title__iregex='\m' + prefix)[:limit-len(data)]:
+            author_str = b.author_unicode()
+            translator = b.translator()
+            if translator:
+                author_str += ' (tłum. ' + translator + ')'
+            data.append(
+                {
+                    'label': b.title,
+                    'author': author_str,
+                    'id': b.id,
+                    'url': b.get_absolute_url()
+                }
+            )
 
     if mozhint:
         data = [
@@ -189,9 +193,9 @@ def main(request):
                 'genre': genre,
             },
             'tags': {
-                'epoch': Tag.objects.filter(category='epoch'),
-                'genre': Tag.objects.filter(category='genre'),
-                'kind': Tag.objects.filter(category='kind'),
+                'epoch': Tag.objects.filter(category='epoch', for_books=True),
+                'genre': Tag.objects.filter(category='genre', for_books=True),
+                'kind': Tag.objects.filter(category='kind', for_books=True),
             },
         })
 
@@ -227,11 +231,11 @@ def search_books(query, lang=None, only_audio=False, only_synchro=False, epoch=N
 
     def ensure_exists(r):
         try:
-            r.book
+            if not r.book:
+                return False
         except Book.DoesNotExist:
             return False
 
-        print(lang, r.book.language)
         if lang and r.book.language != lang:
             return False
         if only_audio and not r.book.has_mp3_file():
@@ -278,7 +282,8 @@ def search_pictures(query, epoch=None, kind=None, genre=None):
 
     def ensure_exists(r):
         try:
-            return r.picture
+            if not r.picture:
+                return False
         except Picture.DoesNotExist:
             return False
 
@@ -289,6 +294,8 @@ def search_pictures(query, epoch=None, kind=None, genre=None):
         if genre and not r.picture.tags.filter(category='genre', slug=genre).exists():
             return False
 
+        return True
+
     results = [r for r in results if ensure_exists(r)]
     return results