from pdcounter.models import Author
from picture.models import Picture
from search.index import Search, SearchResult, PictureResult
+from .forms import SearchFilters
from suggest.forms import PublishingSuggestForm
import re
import json
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 = [
return JsonResponse(data, safe=False)
+
+@cache.never_cache
+def search(request):
+ filters = SearchFilters(request.GET)
+ ctx = {
+ 'title': 'Wynik wyszukiwania',
+ 'query': filters.data['q'],
+ 'filters': filters,
+ }
+ if filters.is_valid():
+ ctx['results'] = filters.results()
+ for k, v in ctx['results'].items():
+ if v:
+ ctx['hasresults'] = True
+ break
+ return render(request, 'search/results.html', ctx)
+
+
@cache.never_cache
def main(request):
+ if request.EXPERIMENTS['search'].value:
+ request.EXPERIMENTS['layout'].override(True)
+ return search(request)
+
query = request.GET.get('q', '')
format = request.GET.get('format')
'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),
},
})
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():
def ensure_exists(r):
try:
- return r.picture
+ if not r.picture:
+ return False
except Picture.DoesNotExist:
return False
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