1
0
Fork 0

Add search for author

This commit is contained in:
Bart Schuurmans 2024-02-03 21:55:46 +01:00
parent 6b1ffbc634
commit 6c9ca0bf19
4 changed files with 49 additions and 1 deletions

View file

@ -1,4 +1,5 @@
""" search views"""
import re
from django.contrib.postgres.search import TrigramSimilarity
@ -39,6 +40,7 @@ class Search(View):
endpoints = {
"book": book_search,
"author": author_search,
"user": user_search,
"list": list_search,
}
@ -90,6 +92,31 @@ def book_search(request):
return TemplateResponse(request, "search/book.html", data)
def author_search(request):
"""search for an author"""
query = request.GET.get("q")
query = query.strip()
data = {"type": "author", "query": query}
results = (
models.Author.objects.annotate(
similarity=TrigramSimilarity("name", query),
)
.filter(
similarity__gt=0.1,
)
.order_by("-similarity")
)
paginated = Paginator(results, PAGE_LENGTH)
page = paginated.get_page(request.GET.get("page"))
data["results"] = page
data["page_range"] = paginated.get_elided_page_range(
page.number, on_each_side=2, on_ends=1
)
return TemplateResponse(request, "search/author.html", data)
def user_search(request):
"""user search: search for a user"""
viewer = request.user