One query to get book for book view

This commit is contained in:
Mouse Reeve 2021-09-27 11:23:55 -07:00
parent 35131262ff
commit cb089ed817

View file

@ -38,18 +38,16 @@ class Book(View):
user_statuses = user_statuses if request.user.is_authenticated else False user_statuses = user_statuses if request.user.is_authenticated else False
try: # it's safe to use this OR because edition and work and subclasses of the same
book = models.Edition.viewer_aware_objects(request.user).filter(id=book_id) # table, so they never have clashing IDs
except models.Edition.DoesNotExist: book = (
book = ( models.Edition.viewer_aware_objects(request.user)
models.Edition.viewer_aware_objects(request.user) .filter(Q(id=book_id) | Q(parent_work__id=book_id))
.filter( .order_by("-edition_rank")
parent_work__id=book_id, .select_related("parent_work")
) .prefetch_related("authors")
.order_by("-edition_rank") .first()
) )
book = book.select_related("parent_work").prefetch_related("authors")
book = book.first()
if not book or not book.parent_work: if not book or not book.parent_work:
raise Http404 raise Http404