Registry /
web-framework / djangorestframework-filters
Install & Compatibility
Where this runs
tested against v0.11.1 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.910 runs
installs and imports cleanly · install 0.0s · import 0.000s · 71MB
glibcpy 3.10–3.910 runs
installs and imports cleanly · install 3.8s · import 0.000s · 72MB
70MB installed
● package 70MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
RestFrameworkFilterBackend
✓ from rest_framework_filters.backends import RestFrameworkFilterBackend
✗ from rest_framework_filters.backends import RestFrameworkFilterBackend
This quickstart demonstrates how to define `FilterSet` classes for models, including `RelatedFilter` for filtering across relationships, and integrate them with Django REST Framework's `ModelViewSet` using the `RestFrameworkFilterBackend`.
import os
from django.db import models
from rest_framework import serializers, viewsets
from rest_framework_filters import FilterSet, RelatedFilter
from rest_framework_filters.backends import RestFrameworkFilterBackend
# --- Minimal Django setup for demonstration (not for production) ---
# from django.conf import settings
# settings.configure(INSTALLED_APPS=['django.contrib.auth', 'django.contrib.contenttypes', 'rest_framework', 'rest_framework_filters'], DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:'}})
# import django
# django.setup()
# --- 1. Define your Models ---
class Author(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')
published_year = models.IntegerField()
def __str__(self):
return f'{self.title} by {self.author.name}'
# --- 2. Define your FilterSet ---
class AuthorFilter(FilterSet):
class Meta:
model = Author
fields = ['name']
class BookFilter(FilterSet):
# Filter by author name (related field)
author = RelatedFilter(AuthorFilter, field_name='author', queryset=Author.objects.all())
class Meta:
model = Book
fields = {
'title': ['iexact', 'icontains'],
'published_year': ['exact', 'gte', 'lte'],
}
# --- 3. Define your Serializers ---
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = '__all__'
class BookSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
class Meta:
model = Book
fields = '__all__'
# --- 4. Define your ViewSets with filter_backends ---
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
filter_backends = (RestFrameworkFilterBackend,)
filterset_class = BookFilter
class AuthorViewSet(viewsets.ModelViewSet):
queryset = Author.objects.all()
serializer_class = AuthorSerializer
filter_backends = (RestFrameworkFilterBackend,)
filterset_class = AuthorFilter
# Example usage (assuming Django/DRF setup):
# from rest_framework.test import APIClient
# client = APIClient()
# # Assuming you have data created, e.g., Author.objects.create(name='Jane Doe')
# # response = client.get('/books/?author__name=Jane') # This would work if DRF endpoints were configured.
# # print(response.data)
Debug
Known issues
breakingThe `queryset` argument for `rest_framework_filters.RelatedFilter` became a required argument.fixEnsure `RelatedFilter` instances explicitly provide a `queryset` argument. E.g., `RelatedFilter(AuthorFilter, field_name='author', queryset=Author.objects.all())`.
affects: 0.10.0 and later
deprecatedThe `MethodFilter` class was deprecated. Its functionality was absorbed directly into the base `Filter` class.fixReplace `MethodFilter(method='my_method')` with `Filter(method='my_method')` or directly define the method on your `FilterSet` and link via `method='my_method'` on a standard `Filter`.
affects: 0.9.0 and later
breakingCompatibility with `django-filter` underwent significant changes. Versions `0.9.x` were locked to `django-filter<1.0`, while versions `0.10.x` and later require `django-filter>=1.0.0`.fixEnsure your `django-filter` dependency matches the requirement of your `djangorestframework-filters` version. For `0.11.1`, ensure `django-filter>=1.0.0` is installed.
affects: 0.9.x to 0.10.x transition
gotcha`AllLookupsFilter` can inadvertently override explicitly declared filters in a `FilterSet` if they share the same field name.fixBe mindful when using `AllLookupsFilter` alongside explicitly defined filters. Ensure field names do not clash, or carefully structure your `FilterSet` to manage the order of filter application.
affects: All versions, especially prior to 0.8.1 (where a fix addressed some cases)
Upgrade
Version history
0.11.1latest on PyPI · released Mar 21, 2019
Audit
Dependencies
django-filterrequiredCore dependency for filtering logic; specific version required depends on `djangorestframework-filters` version.
djangorestframeworkrequiredIntegrates with Django REST Framework; requires DRF version >=3.0.0.
DjangorequiredUnderlying web framework; requires Django version >=1.8.0.