Skip to content

Commit dd336ca

Browse files
author
Juan Benitez
committed
feat: add filters to endpoints
1 parent 820bb0d commit dd336ca

File tree

4 files changed

+28
-4
lines changed

4 files changed

+28
-4
lines changed

api_crud/settings.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030
REST_FRAMEWORK = {
3131
'DEFAULT_AUTHENTICATION_CLASSES': (
3232
'rest_framework_simplejwt.authentication.JWTAuthentication',
33-
)
33+
),
34+
'DEFAULT_FILTER_BACKENDS': (
35+
'django_filters.rest_framework.DjangoFilterBackend',
36+
),
3437
}
3538

3639

@@ -44,6 +47,7 @@
4447
'django.contrib.messages',
4548
'django.contrib.staticfiles',
4649
'rest_framework',
50+
'django_filters',
4751
'authentication',
4852
'movies',
4953
]

movies/filters.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from django_filters import rest_framework as filters
2+
from .models import Movie
3+
4+
5+
# We create filters for each field we want to be able to filter on
6+
class MovieFilter(filters.FilterSet):
7+
title = filters.CharFilter(lookup_expr='icontains')
8+
genre = filters.CharFilter(lookup_expr='icontains')
9+
year = filters.NumberFilter()
10+
year__gt = filters.NumberFilter(field_name='year', lookup_expr='gt')
11+
year__lt = filters.NumberFilter(field_name='year', lookup_expr='lt')
12+
creator__username = filters.CharFilter(lookup_expr='icontains')
13+
14+
class Meta:
15+
model = Movie
16+
fields = ['title', 'genre', 'year', 'year__gt', 'year__lt', 'creator__username']
17+

movies/models.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Movie(models.Model):
99
updated_at = models.DateTimeField(auto_now=True)
1010
creator = models.ForeignKey('auth.User', related_name='movies', on_delete=models.CASCADE)
1111

12-
13-
12+
class Meta:
13+
ordering = ['-id']
1414

1515

movies/views.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
from rest_framework.generics import RetrieveUpdateDestroyAPIView, ListCreateAPIView
22
from rest_framework.permissions import IsAuthenticated
3+
from django_filters import rest_framework as filters
34
from .models import Movie
45
from .permissions import IsOwnerOrReadOnly
56
from .serializers import MovieSerializer
67
from .pagination import CustomPagination
8+
from .filters import MovieFilter
79

810

911
class ListCreateMovieAPIView(ListCreateAPIView):
10-
1112
serializer_class = MovieSerializer
1213
queryset = Movie.objects.all()
1314
permission_classes = [IsAuthenticated]
1415
pagination_class = CustomPagination
16+
filter_backends = (filters.DjangoFilterBackend,)
17+
filterset_class = MovieFilter
1518

1619
def perform_create(self, serializer):
1720
# Assign the user who created the movie

0 commit comments

Comments
 (0)