Advanced searching through songs.

This commit is contained in:
Jim Driessen
2017-01-25 01:37:22 +01:00
parent 6601aaeffd
commit 6ceeb30999
4 changed files with 18 additions and 8 deletions

View File

@ -3,6 +3,7 @@ from mutagen.mp3 import MP3
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q
from django.http import JsonResponse, HttpResponseForbidden
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_http_methods
@ -29,12 +30,17 @@ def songs(request):
except:
page = 1
songs_query = Song.objects.filter(
deleted=False,
artist__icontains=request.POST.get('artist', ''),
title__icontains=request.POST.get('title', ''),
user__name__icontains=request.POST.get('uploader', '')
).order_by('artist', 'title').select_related('user')
queries = [Q(deleted=False)]
queries.extend([Q(Q(artist__icontains=word) | Q(title__icontains=word) | Q(user__name__icontains=word)) for word in request.POST.get('all', '').split()])
queries.extend([Q(artist__icontains=word) for word in request.POST.get('artist', '').split()])
queries.extend([Q(title__icontains=word) for word in request.POST.get('title', '').split()])
queries.extend([Q(user__name__icontains=word) for word in request.POST.get('uploader', '').split()])
filter_query = queries.pop()
for query in queries:
filter_query &= query
songs_query = Song.objects.filter(filter_query).order_by('artist', 'title').select_related('user')
total = songs_query.count()
paginator = Paginator(songs_query, pagesize)