Registry / web-framework / djangorestframework-filters

djangorestframework-filters

JSON →
library0.11.1pypypiunverified

djangorestframework-filters (DRF-Filters) provides a more powerful and flexible filtering solution for Django REST Framework. It extends `django-filter` to integrate seamlessly with DRF, offering features like related field filtering, method-based filtering, and lookup customization. The current stable version is 0.11.1, with active development on a future 1.0.0 release, while 0.x continues to receive maintenance updates.

pip install djangorestframework-filters
INSTALL
IMPORT
SIG · DJANGORESTFRAMEWOR
D
djangorestframework-filters
web-frameworkpythonv0.11.1
Install
3.8s avg
Import
Disk
70MB
Pass rate
10/ 10
Env Coverage10 / 10
glibc
3.93.13
musl
3.93.13
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
musl
py 3.103.910 runs
installs and imports cleanly · install 0.0s · import 0.000s · 71MB
glibc
py 3.103.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.
fix
Ensure `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.
fix
Replace `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`.
fix
Ensure 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.
fix
Be 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.
Agent activity
19 hits · last 30 days
node
18
Resources