- Django 2 support.
- Using tox-travis for travis builds.
- Fixed negated queries in Django backend.
Previously negation did
NOT (condition1 and condition2)
vs expectedNOT condition1 and NOT condition2
. See #53.
- Py36 compatibility by switching to
enum-compat
fromenum34
- Improvement to
README
by including imports in code examples - Defaulting
SQLAlchemyModelFilterSet
to useSQLAlchemyFilterBackend
- Defaulting
PlainModelFilterSet
to usePlainFilterBackend
- Using universal wheels for distribution
- Fixed bug which did not allow to use SQLAlchemy backend fully
without having
django.contrib.contenttypes
in installed apps. See #36. - Improved SQLAlchemy versions compatibility.
- Added
URLFilterBackend
alias in DRF integration for backend to reduce confusion withDjangoFilterBackend
as in url filter core backend.
- Fixed plain backend to return list in Python 3 vs
filter()
generator which is not compatible with Django pagination since it requireslen()
to be implemented.
- Fixed bug where default filters were used in root filtersets. As a result additional querystring parameters were validation which broke other functionality such as pagination.
- Added plain objects filtering support. More in docs and GitHub issue #8.
- Added CallableFilter which allows to implement custom filters.
- Normalizing to DRF's
ValidationError
when usingStrictMode.Fail
since filterset raises Django'sValidationError
which caused 500 status code. - Fixes
ModelFilterSet
automatic introspection to ignoreGenericForeignKey
since they dont have form fields associated with them. See #20. - Releasing with wheels.
Added SQLAlchemy support.
FilterSet
instances have much more useful__repr__
which shows all filters at a glance. For example:>>> PlaceFilterSet() PlaceFilterSet() address = Filter(form_field=CharField, lookups=ALL, default_lookup="exact", is_default=False) id = Filter(form_field=IntegerField, lookups=ALL, default_lookup="exact", is_default=True) name = Filter(form_field=CharField, lookups=ALL, default_lookup="exact", is_default=False) restaurant = RestaurantFilterSet() serves_hot_dogs = Filter(form_field=BooleanField, lookups=ALL, default_lookup="exact", is_default=False) serves_pizza = Filter(form_field=BooleanField, lookups=ALL, default_lookup="exact", is_default=False) waiter = WaiterFilterSet() id = Filter(form_field=IntegerField, lookups=ALL, default_lookup="exact", is_default=True) name = Filter(form_field=CharField, lookups=ALL, default_lookup="exact", is_default=False)
- Fixed installation issue where not all subpackages were installed.
- First release on PyPI.