NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #974 most downloaded on PyPI
Django-filter is a reusable Django application for allowing users to filter querysets dynamically.
Last release today
03 Oct 2026
Release timing varies
gaps range from 2 weeks to 9 months
Most releases are documented
notes for 40 of 47 stable releases
Nothing withdrawn
no release was ever pulled
17 years old
49 releases · first in 2009
Added testing against Python 3.15.
Added testing against Python 3.15.
Dropped support for Python 3.10.
LinkWidget will now conditionally escape provided label text.
Filter choices are under developer control, and applications populating them from user-supplied values, including via AllValuesFilter, must filter those appropriately, as always. Nonetheless, escaping labels by default serves as defense-in-depth hardening. Apply mark_safe() to labels intended to contain HTML.
Thanks to Sanjeev Kumar for the report.
DRF integration will require the upcoming DRF v3.18. See https://github.com/encode/django-rest-framework/pull/9978
Added testing for Django 6.1.
DRF integration will require the upcoming DRF v3.18. See https://github.com/encode/django-rest-framework/pull/9978
Added testing against Python 3.14.
One column per quarter.
Dropped support for Django <5.2 LTS
Added testing for Django 6.0.
Dropped support for Django <5.2 LTS
Dropped support for Python 3.9.
Removed the in-built API schema generation methods, which have been deprecated since v23.2.
Removed the in-built API schema generation methods, which have been deprecated since v23.2.
You should use drf-spectacular for generating OpenAPI schemas with DRF.
Dropped support for EOL Python 3.8.
Added testing against Python 3.13.
Added official support for Django 5.2.
Adds official support for Django 5.1.
Adds official support for Django 5.1.
Allow using dictionaries for grouped choices on Django 5.0+.
Thanks to Sævar Öfjörð Magnússon.
Adds unknown_field_behavior FilterSet option to allowing warning and ignore behaviours for unknown field types during FilterSet generation.
Thanks to Loes.
Fixed a regression in v23.4 where callable choices were incorrectly evaluated at filter instantiation, on Django versions prior to 5.0.
Fixed a regression in v23.4 where callable choices were incorrectly evaluated at filter instantiation, on Django versions prior to 5.0.
Thanks to Craig de Stigter for the report and reproduce.
Updated supported Python and Django versions, and resolved upcoming Django deprecations.
Updated supported Python and Django versions, and resolved upcoming Django deprecations.
Required versions are now at least Python 3.8 and Django 4.2.
Thanks to Michael Manganiello.
Allowed passing a FilterSet class to the filterset_factory().
Thanks to Birger Schacht.
Set empty default value of filterset data to MultiValueDict.
Thanks to Shlomo Gordon.
Preserve list values passed to the data dict in CSV widgets.
Thanks to Bryan Brancotte.
Updates French and Ukrainian localisations.
Thanks to Weblate.
Fixed OrderingFilter handling of empty values.
Fixed OrderingFilter handling of empty values. (#1628)
Thanks to Matt Munns.
Fix DeprecationWarning for pkgutil.find_loader.
Official support for Django 5.0 and Python 3.12.
Fix DeprecationWarning for pkgutil.find_loader.
Thanks to wmorrell.
Adopted Furo theme for docs.
Adds initial compatibility with Django 5.0, prior to Django 5.0a1.
Adds initial compatibility with Django 5.0, prior to Django 5.0a1.
Updates packaging to use pyproject.toml and Flit.
Deprecated the schema generation methods of the DRF related DjangoFilterBackend. These will be removed in version 25.1.
Deprecated the schema generation methods of the DRF related DjangoFilterBackend. These will be removed in version 25.1.
You should use drf-spectacular for generating OpenAPI schemas with DRF.
In addition, stopped testing against the (very old now) coreapi schema generation. These methods should continue to work if you're using them until v25.1, but coreapi is no longer maintained, and is raising warnings against the current versions of Python. To workaround this is not worth the effort at this point.
Updated Polish translations.
Declared support for Django 4.2.
Declared support for Django 4.2.
Various updated and new translations. Thanks to all who contributed, and Weblate for hosting.
Fixed QueryArrayWidget.value_from_datadict() to not mutate input data. (#1540)
Removed outdated deprecated warnings for code removed in version 2.1.
Update supported Python and Django versions: minimal Python is now 3.7, minimum Django is now 3.2.
Added testing for Python 3.10 and Django 4.1.
Removed outdated deprecated warnings for code removed in version 2.1.
Removed filter_class (use filterset_class) and filter_fields (filterset_fields) that were deprecated in [version 2.0 (2018)](https://django-filter.readthedocs.io/en/main/guide/migration.html#view-attributes-renamed-867).
The code base is now formatted with Black.
Other breaking changes are rare. Where required, every effort will be made to apply a "Year plus two" deprecation period. For example, a change initia…
This is a maintenance release updating CI testing for the latest non-end-of-life versions of Python and Django, and updating package metadata accordingly.
With this release django-filter is switching to a two-part CalVer versioning scheme, such as 21.1. The first number is the year. The second is the release number within that year.
On an on-going basis, Django-Filter aims to support all current Django versions, the matching current Python versions, and the latest version of Django REST Framework.
Please see:
Support for Python and Django versions will be dropped when they reach end-of-life. Support for Python versions will dropped when they reach end-of-life, even when still supported by a current version of Django.
Other breaking changes are rare. Where required, every effort will be made to apply a "Year plus two" deprecation period. For example, a change initially introduced in 23.x would offer a fallback where feasible and finally be removed in 25.1. Where fallbacks are not feasible, breaking changes without deprecation will be called out in the release notes.
Beyond that change, there are few changes. Some small bugfixes, improvements to localisation, and documentation tweaks. Thanks to all who were involved.
SECURITY: Added a MaxValueValidator to the form field for NumberFilter. This prevents a potential DoS attack if numbers with very large exponents were
SECURITY: Added a MaxValueValidator to the form field for
NumberFilter. This prevents a potential DoS attack if numbers with very
large exponents were subsequently converted to integers.
The default limit value for the validator is 1e50.
The new NumberFilter.get_max_validator() allows customising the used
validator, and may return None to disable the validation entirely.
Added testing against Django 3.1 and Python 3.9.
In addition tests against Django main development branch are now required to pass.
https://github.com/carltongibson/django-filter/blob/master/CHANGES.rst#version-230-2020-6-5
https://github.com/carltongibson/django-filter/blob/master/CHANGES.rst#version-230-2020-6-5
Fixed import of FieldDoesNotExist. (#1127)
Added testing against Django 3.0. (#1125)
Declared support for, and added testing against, Python 3.8. (#1138)
Fix filterset multiple inheritance bug (#1131)
Allowed customising default lookup expression. (#1129)
Drop Django 2.1 and below (#1180)
Fixed IsoDateTimeRangeFieldTests for Django 3.1
Require tests to pass against Django master.
Added DjangoFilterBackend.get_schema_operation_parameters() for DRF 3.10+ OpenAPI schema generation.
Highlights:
DjangoFilterBackend.get_schema_operation_parameters() for DRF 3.10+
OpenAPI schema generation. (#1086)lookup_expr to MultipleChoiceFilter (#1054)Fixed a regression in FilterView introduced in 2.0. An empty QuerySet was incorrectly used whenever the FilterSet was unbound (i.e. when there were no
Fixed a regression in FilterView introduced in 2.0. An empty QuerySet was
incorrectly used whenever the FilterSet was unbound (i.e. when there were
no GET parameters). The correct, pre-2.0 behaviour is now restored.
A workaround was to set strict=False on the FilterSet. This is no
longer necessary, so you may restore strict behaviour as desired.
Added IsoDateTimeFromToRangeFilter. Allows From-To filtering using
ISO-8601 formatted dates.
Fixed doc URL in utils.deprecate().
2.0 introduced a number of small changes and tidy-ups. Please see the migration guide:
https://django-filter.readthedocs.io/en/master/guide/migration.html#migrating-to-2-0
renderer argument to render() method of BooleanWidget (#923)Nothing published for this version
Deprecate 'extra' field attrs on Filter
Quick fix for verbose_field_name issue
Quick fix for verbose_field_name issue (#722)
Quick fix for verbose_field_name issue from 1.0.3 (#722)
Improves compatibility with Django REST Framework schema generation.
Improves compatibility with Django REST Framework schema generation.
See the 1.0.3 Milestone for full details.
Updates for compatibility with Django 1.11 and Django REST Framework 3.6.
Updates for compatibility with Django 1.11 and Django REST Framework 3.6.
Adds CI testing against Python 3.6
See the 1.0.2 Milestone for full details.
Assuming DRF is installed, adds rest_framework submodule to the django_filters namespace.
Small patch.
Assuming DRF is installed, adds rest_framework submodule to the django_filters namespace.
This allows usage like:
import django_filters
class ProductFilter(django_filters.rest_framework.FilterSet):
# ....
without requiring a further import.
Small release to ease compatibility with DRF:
#568 Adds rest_framework to the django_filters namespace to allow single ``import django_filters` usage.
A number of small updates to the docs
This release removes all the deprecated code from 0.14 and 0.15 for 1.0 #480.
This release removes all the deprecated code from 0.14 and 0.15 for 1.0 #480.
Please see the Migration Notes for details of how to migrate.
Stick with 0.15.3 and fix warnings there if you're not ready to update.
The release also includes a number of small fixes and documentation updates. See the 1.0 Milestone for full details.
Adds compatibility for DRF (3.5+) get_schema_fields filter backend introspection.
Adds compatibility for DRF (3.5+) get_schema_fields filter backend introspection.
Adds compatibility for DRF (3.5+) get_schema_fields filter backend introspection.
#492 Port get_schema_fields from DRF
Quick fix for #506. Removes an import time dependency on having the Django Template Language backend configured.
Quick fix for #506. Removes an import time dependency on having the Django Template Language backend configured.
A couple of quick bug fixes: - #496 OrderingFilter not working with Select widget - #498 DRF Backend Templates not loading Recommended.
A couple of quick bug fixes:
Recommended.
Most changes should raise a Deprecation Warning.
This is a preparatory release for a 1.0. Lots of clean-up, lots of changes, mostly backwards compatible.
Special thanks to Ryan P Kilby (@rpkilby) for lots of hard work.
Most changes should raise a Deprecation Warning.
Note: if you're doing Clever Things™ with the various filter options
— filter_overrides etc — you may run into an AttributeError since these
are now defined on the metaclass and not on the filter itself.
(See the discussion on #459)
Summary: Highly Recommended, but take a moment to ensure everything still works.
MethodFilter in favour of Filter.method #382get_filter_predicate hook. (Allows e.g. filtering on annotated fields) #469See also the Full Milestone Listing and the 0.14.0 to 0.15.0 comparison
Small release adding a number of fixes and a DurationFilter.
Small release adding a number of fixes and a DurationFilter.
Confirmed support for Django 1.10.
Add support for filtering on DurationField (new in Django 1.8).
Fix UUIDFilter import issue
Improve FieldLookupError message
Add filters_for_model to improve extensibility
Fix limit_choices_to behavior with callables
Fix distinct behavior for range filters
Various Minor Clean up issues.
Add support for filtering by CSV #363
Add support for filtering by CSV #363
Add DateTimeFromToRangeFilter #376
Add Chinese translation #359
Lots of fixes.
Improves compatibility with Django 1.8 and 1.9, adds a JavaScript friendly BooleanWidget and support for custom ORM lookup types.
Improves compatibility with Django 1.8 and 1.9, adds a JavaScript friendly BooleanWidget and support for custom ORM lookup types.
Full changes: https://github.com/alex/django-filter/compare/0.11.0...0.12.0
Recommended.
Raised minimum Django version to 1.8.x
FEATURE: Add support for custom ORM lookup types #221
FEATURE: Add JavaScript friendly BooleanWidget #270
FIXED: (More) Compatability with Django 1.8 and Django 1.9+
BREAKING CHANGE: custom filter names are now also be used for ordering #230
If you use ordering on a field you defined as custom filter with custom name, you should now use the filter name as ordering key as well.
Eg. For a filter like :
- class F(FilterSet):
account = CharFilter(name='username') class Meta:
model = User fields = ['account', 'status'] order_by = True
Before, ordering was like ?o=username. Since 0.12.0 it's o=account.
Added default filter method lookup for MethodFilter #222
Lots of cool things:
strict #255Enjoy
FEATURE: Added default filter method lookup for MethodFilter #222
FEATURE: Added support for yesterday in daterangefilter #234
FEATURE: Created Filter for NumericRange. #236
FEATURE: Added Date/time range filters #215
FEATURE: Added option to raise with strict #255
FEATURE: Added Form Field and Filter to parse ISO-8601 timestamps
Fixes a ForeignObjectRel change with Django 1.8. Smuggles in a couple of little feature additions.
Fixes a ForeignObjectRel change with Django 1.8. Smuggles in a couple of little feature additions.
FEATURE: Added conjoined parameter to MultipleChoiceFilter
FEATURE: Added together meta option to validate fields as a group
FIXED: Added testing on Django 1.8
FIXED: get_model_field on Django 1.8
FIXED: Compatibility with Django v1.8a1
FIXED: Compatibility with Django v1.8a1
FIXED: Compatibility with Debug Toolbar's versions panel
FIXED: Compatibility with Debug Toolbar's versions panel
Nothing published for this version
FEATURE: Added exclusion filters support
FEATURE: Added exclusion filters support
FEATURE: Added fields dictionary shorthand syntax
FEATURE: Added MethodFilter.
FIXED: #115 "filters.Filter.filter() fails if it receives [] or () as value"
MISC: Various Documentation and Testing improvements
FEATURE: Support descending ordering (slighty backwards incompatible).
FEATURE: Added support for AutoField.
FEATURE: There is a "distinct" flag to ensure that only unique rows are returned.
FEATURE: Support descending ordering (slighty backwards incompatible).
FEATURE: Support "strict" querysets, ie wrong filter data returns no results.
FIXED: Some translation strings were changed to be in line with admin.
FIXED: Support for Django 1.7.
raised minimum Django version to 1.4.x
raised minimum Django version to 1.4.x
added Python 3.2 and Python 3.3 support
added Django 1.5 support and initial 1.6 compatability
FEATURE: recognition of custom model field subclasses
FEATURE: allow optional display names for order_by values
FEATURE: addition of class-based FilterView
FEATURE: addition of count() method on FilterSet to prevent pagination from loading entire queryset
FIXED: attempts to filter on reverse side of m2m, o2o or fk would raise an error
Nothing published for this version
* project brought back to life
project brought back to life
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →