optimised query on recent_comics_json

This commit is contained in:
ajurna
2020-05-27 12:09:15 +01:00
parent 96d7edb307
commit 3d18d1cae6

View File

@@ -8,7 +8,7 @@ from os import path
from django.contrib.auth import authenticate, login from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db.models import Max, Count from django.db.models import Max, Count, F
from django.db.transaction import atomic from django.db.transaction import atomic
from django.http import HttpResponse, FileResponse from django.http import HttpResponse, FileResponse
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
@@ -126,15 +126,14 @@ def recent_comics_json(request):
else: else:
order_string += "date_added" order_string += "date_added"
comics = comics.order_by(order_string) comics = comics.order_by(order_string)
comics = comics.filter(comicstatus__user=request.user).annotate(
unread=F('comicstatus__unread'),
finished=F('comicstatus__finished'),
last_read_page=F('comicstatus__last_read_page')
)
response_data["recordsFiltered"] = comics.count() response_data["recordsFiltered"] = comics.count()
response_data["data"] = list() response_data["data"] = list()
for book in comics[start:end]: for book in comics[start:end]:
status, created = ComicStatus.objects.get_or_create(comic=book, user=request.user)
if created:
status.save()
book.unread = status.unread
book.finished = status.finished
book.last_read_page = status.last_read_page
response_data["data"].append( response_data["data"].append(
{ {
"selector": urlsafe_base64_encode(book.selector.bytes), "selector": urlsafe_base64_encode(book.selector.bytes),