Faster search queries

This commit is contained in:
tcely committed 2025-07-21 06:50:50 -04:00
1 parent 18d3077adf
commit 8e7e5e74c6
1 file changed
+13 -13
+13 -13
View File
@@ -25,7 +25,7 @@ from common.utils import append_uri_params, mkdir_p, multi_key_sort
from django_huey import DJANGO_HUEY, get_queue from django_huey import DJANGO_HUEY, get_queue
from common.huey import h_q_reset_tasks from common.huey import h_q_reset_tasks
from common.logger import log from common.logger import log
from .models import Source, Media, MediaServer from .models import Source, Media, MediaServer, Metadata
from .forms import (ValidateSourceForm, ConfirmDeleteSourceForm, RedownloadMediaForm, from .forms import (ValidateSourceForm, ConfirmDeleteSourceForm, RedownloadMediaForm,
SkipMediaForm, EnableMediaForm, ResetTasksForm, ScheduleTaskForm, SkipMediaForm, EnableMediaForm, ResetTasksForm, ScheduleTaskForm,
ConfirmDeleteMediaServerForm, SourceForm) ConfirmDeleteMediaServerForm, SourceForm)
@@ -530,24 +530,24 @@ class MediaView(ListView):
def get_queryset(self): def get_queryset(self):
q = Media.objects.all() q = Media.objects.all()
md_qs = Metadata.objects.all()
if self.filter_source: if self.filter_source:
q = q.filter(source=self.filter_source) q = q.filter(source=self.filter_source)
if self.query: if self.query:
m_q = q
needle = self.query needle = self.query
md_q = md_qs.filter(
Q(media__in=m_q) &
(
Q(key__contains=needle) |
Q(media__title__icontains=needle) |
Q(value__fulltitle__icontains=needle)
)
).only('pk')
q = q.filter(new_metadata__in=md_q)
if self.search_description: if self.search_description:
q = q.filter( q = q.union(m_q.filter(new_metadata__value__description__icontains=needle))
Q(new_metadata__value__fulltitle__icontains=needle) |
Q(new_metadata__value__description__icontains=needle) |
Q(title__icontains=needle) |
Q(key__contains=needle)
)
else:
q = q.filter(
Q(new_metadata__value__fulltitle__icontains=needle) |
Q(title__icontains=needle) |
Q(key__contains=needle)
)
if self.only_skipped: if self.only_skipped:
q = q.filter(Q(can_download=False) | Q(skip=True) | Q(manual_skip=True)) q = q.filter(Q(can_download=False) | Q(skip=True) | Q(manual_skip=True))
elif not self.show_skipped: elif not self.show_skipped: