Added artist filtering on API
This commit is contained in:
parent
c4ed7513c5
commit
c6d408924b
|
@ -309,6 +309,7 @@ REST_FRAMEWORK = {
|
||||||
),
|
),
|
||||||
'DEFAULT_FILTER_BACKENDS': (
|
'DEFAULT_FILTER_BACKENDS': (
|
||||||
'rest_framework.filters.OrderingFilter',
|
'rest_framework.filters.OrderingFilter',
|
||||||
|
'django_filters.rest_framework.DjangoFilterBackend',
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
import django_filters
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
|
class ArtistFilter(django_filters.FilterSet):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.Artist
|
||||||
|
fields = {
|
||||||
|
'name': ['exact', 'iexact', 'startswith']
|
||||||
|
}
|
|
@ -182,6 +182,21 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
|
||||||
|
|
||||||
self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8')))
|
self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8')))
|
||||||
|
|
||||||
|
def test_can_search_artist_by_name_start(self):
|
||||||
|
artist1 = factories.ArtistFactory(name='alpha')
|
||||||
|
artist2 = factories.ArtistFactory(name='beta')
|
||||||
|
results = {
|
||||||
|
'next': None,
|
||||||
|
'previous': None,
|
||||||
|
'count': 1,
|
||||||
|
'results': [serializers.ArtistSerializerNested(artist1).data]
|
||||||
|
}
|
||||||
|
expected = json.dumps(results)
|
||||||
|
url = self.reverse('api:v1:artists-list')
|
||||||
|
response = self.client.get(url, {'name__startswith': 'a'})
|
||||||
|
|
||||||
|
self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8')))
|
||||||
|
|
||||||
def test_can_search_tracks(self):
|
def test_can_search_tracks(self):
|
||||||
artist1 = models.Artist.objects.create(name='Test1')
|
artist1 = models.Artist.objects.create(name='Test1')
|
||||||
artist2 = models.Artist.objects.create(name='Test2')
|
artist2 = models.Artist.objects.create(name='Test2')
|
||||||
|
|
|
@ -21,8 +21,10 @@ from taggit.models import Tag
|
||||||
from . import models
|
from . import models
|
||||||
from . import serializers
|
from . import serializers
|
||||||
from . import importers
|
from . import importers
|
||||||
|
from . import filters
|
||||||
from . import utils
|
from . import utils
|
||||||
|
|
||||||
|
|
||||||
class SearchMixin(object):
|
class SearchMixin(object):
|
||||||
search_fields = []
|
search_fields = []
|
||||||
|
|
||||||
|
@ -52,7 +54,8 @@ class ArtistViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet):
|
||||||
serializer_class = serializers.ArtistSerializerNested
|
serializer_class = serializers.ArtistSerializerNested
|
||||||
permission_classes = [ConditionalAuthentication]
|
permission_classes = [ConditionalAuthentication]
|
||||||
search_fields = ['name']
|
search_fields = ['name']
|
||||||
ordering_fields = ('creation_date',)
|
ordering_fields = ('creation_date', 'name')
|
||||||
|
filter_class = filters.ArtistFilter
|
||||||
|
|
||||||
|
|
||||||
class AlbumViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet):
|
class AlbumViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet):
|
||||||
|
|
|
@ -45,6 +45,7 @@ django-taggit==0.22.1
|
||||||
persisting-theory==0.2.1
|
persisting-theory==0.2.1
|
||||||
django-versatileimagefield==1.7.1
|
django-versatileimagefield==1.7.1
|
||||||
django-cachalot==1.5.0
|
django-cachalot==1.5.0
|
||||||
|
django-filter==1.1
|
||||||
django-rest-auth==0.9.1
|
django-rest-auth==0.9.1
|
||||||
beautifulsoup4==4.6.0
|
beautifulsoup4==4.6.0
|
||||||
Markdown==2.6.8
|
Markdown==2.6.8
|
||||||
|
|
Loading…
Reference in New Issue