Fixed #81: Search now unaccent letters for queries
This commit is contained in:
parent
9b0d5541e0
commit
62d0381f91
|
@ -37,6 +37,7 @@ DJANGO_APPS = (
|
||||||
'django.contrib.sites',
|
'django.contrib.sites',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
|
'django.contrib.postgres',
|
||||||
|
|
||||||
# Useful template tags:
|
# Useful template tags:
|
||||||
# 'django.contrib.humanize',
|
# 'django.contrib.humanize',
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Generated by Django 2.0.2 on 2018-02-27 18:43
|
||||||
|
from django.db import migrations
|
||||||
|
from django.contrib.postgres.operations import UnaccentExtension
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = []
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
UnaccentExtension()
|
||||||
|
]
|
|
@ -63,7 +63,7 @@ class ArtistViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet):
|
||||||
'albums__tracks__tags'))
|
'albums__tracks__tags'))
|
||||||
serializer_class = serializers.ArtistSerializerNested
|
serializer_class = serializers.ArtistSerializerNested
|
||||||
permission_classes = [ConditionalAuthentication]
|
permission_classes = [ConditionalAuthentication]
|
||||||
search_fields = ['name']
|
search_fields = ['name__unaccent']
|
||||||
filter_class = filters.ArtistFilter
|
filter_class = filters.ArtistFilter
|
||||||
ordering_fields = ('id', 'name', 'creation_date')
|
ordering_fields = ('id', 'name', 'creation_date')
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ class AlbumViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet):
|
||||||
'tracks__files'))
|
'tracks__files'))
|
||||||
serializer_class = serializers.AlbumSerializerNested
|
serializer_class = serializers.AlbumSerializerNested
|
||||||
permission_classes = [ConditionalAuthentication]
|
permission_classes = [ConditionalAuthentication]
|
||||||
search_fields = ['title']
|
search_fields = ['title__unaccent']
|
||||||
ordering_fields = ('creation_date',)
|
ordering_fields = ('creation_date',)
|
||||||
|
|
||||||
|
|
||||||
|
@ -133,9 +133,9 @@ class TrackViewSet(TagViewSetMixin, SearchMixin, viewsets.ReadOnlyModelViewSet):
|
||||||
search_fields = ['title', 'artist__name']
|
search_fields = ['title', 'artist__name']
|
||||||
ordering_fields = (
|
ordering_fields = (
|
||||||
'creation_date',
|
'creation_date',
|
||||||
'title',
|
'title__unaccent',
|
||||||
'album__title',
|
'album__title__unaccent',
|
||||||
'artist__name',
|
'artist__name__unaccent',
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
@ -249,7 +249,11 @@ class Search(views.APIView):
|
||||||
return Response(results, status=200)
|
return Response(results, status=200)
|
||||||
|
|
||||||
def get_tracks(self, query):
|
def get_tracks(self, query):
|
||||||
search_fields = ['mbid', 'title', 'album__title', 'artist__name']
|
search_fields = [
|
||||||
|
'mbid',
|
||||||
|
'title__unaccent',
|
||||||
|
'album__title__unaccent',
|
||||||
|
'artist__name__unaccent']
|
||||||
query_obj = utils.get_query(query, search_fields)
|
query_obj = utils.get_query(query, search_fields)
|
||||||
return (
|
return (
|
||||||
models.Track.objects.all()
|
models.Track.objects.all()
|
||||||
|
@ -263,7 +267,10 @@ class Search(views.APIView):
|
||||||
|
|
||||||
|
|
||||||
def get_albums(self, query):
|
def get_albums(self, query):
|
||||||
search_fields = ['mbid', 'title', 'artist__name']
|
search_fields = [
|
||||||
|
'mbid',
|
||||||
|
'title__unaccent',
|
||||||
|
'artist__name__unaccent']
|
||||||
query_obj = utils.get_query(query, search_fields)
|
query_obj = utils.get_query(query, search_fields)
|
||||||
return (
|
return (
|
||||||
models.Album.objects.all()
|
models.Album.objects.all()
|
||||||
|
@ -277,7 +284,7 @@ class Search(views.APIView):
|
||||||
|
|
||||||
|
|
||||||
def get_artists(self, query):
|
def get_artists(self, query):
|
||||||
search_fields = ['mbid', 'name']
|
search_fields = ['mbid', 'name__unaccent']
|
||||||
query_obj = utils.get_query(query, search_fields)
|
query_obj = utils.get_query(query, search_fields)
|
||||||
return (
|
return (
|
||||||
models.Artist.objects.all()
|
models.Artist.objects.all()
|
||||||
|
@ -292,7 +299,7 @@ class Search(views.APIView):
|
||||||
|
|
||||||
|
|
||||||
def get_tags(self, query):
|
def get_tags(self, query):
|
||||||
search_fields = ['slug', 'name']
|
search_fields = ['slug', 'name__unaccent']
|
||||||
query_obj = utils.get_query(query, search_fields)
|
query_obj = utils.get_query(query, search_fields)
|
||||||
|
|
||||||
# We want the shortest tag first
|
# We want the shortest tag first
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Search now unaccent letters for queries like "The Dø" or "Björk", yielding more results (#81)
|
Loading…
Reference in New Issue