Add filtering, search, and ordering to DRF ViewSets with django-filter and SearchFilter.
Filtering in DRF
pip install django-filter
class PostFilter(django_filters.FilterSet):
title = django_filters.CharFilter(lookup_expr="icontains")
min_date = django_filters.DateFilter(field_name="created_at", lookup_expr="gte")
class Meta:
model = Post
fields = ["is_draft", "author"]
class PostViewSet(viewsets.ModelViewSet):
filterset_class = PostFilter
search_fields = ["title", "body"] # ?search=keyword
ordering_fields = ["created_at"] # ?ordering=-created_at