diff --git a/Makefile b/Makefile index 15fc56f..5ebe2a0 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,11 @@ -.PHONY: deps, test +.PHONY: deps, test, clean deps: pip install -r ./requirements/test.txt test: - ./runtests.py \ No newline at end of file + ./runtests.py + +clean: + rm -r build dist django_filter.egg-info + diff --git a/django_filters/filterset.py b/django_filters/filterset.py index 5711772..48d0446 100644 --- a/django_filters/filterset.py +++ b/django_filters/filterset.py @@ -327,8 +327,8 @@ class BaseFilterSet(object): assert filter_class is not None, ( "%s resolved field '%s' with '%s' lookup to an unrecognized field " - "type %s. Try adding an override to 'filter_overrides'. See: " - "https://django-filter.readthedocs.io/en/latest/usage.html#overriding-default-filters" + "type %s. Try adding an override to 'Meta.filter_overrides'. See: " + "https://django-filter.readthedocs.io/en/latest/ref/filterset.html#customise-filter-generation-with-filter-overrides" ) % (cls.__name__, name, lookup_expr, f.__class__.__name__) return filter_class(**default) diff --git a/docs/guide/usage.txt b/docs/guide/usage.txt index 8860a23..153d8bc 100644 --- a/docs/guide/usage.txt +++ b/docs/guide/usage.txt @@ -135,23 +135,9 @@ Overriding default filters Like ``django.contrib.admin.ModelAdmin``, it is possible to override default filters for all the models fields of the same kind using -``filter_overrides``:: +``filter_overrides`` on the ``Meta`` class:: class ProductFilter(django_filters.FilterSet): - filter_overrides = { - models.CharField: { - 'filter_class': django_filters.CharFilter, - 'extra': lambda f: { - 'lookup_expr': 'icontains', - }, - }, - models.BooleanField: { - 'filter_class': django_filters.BooleanFilter, - 'extra': lambda f: { - 'widget': forms.CheckboxInput, - }, - }, - } class Meta: model = Product @@ -159,6 +145,20 @@ default filters for all the models fields of the same kind using 'name': ['exact'], 'release_date': ['isnull'], } + filter_overrides = { + models.CharField: { + 'filter_class': django_filters.CharFilter, + 'extra': lambda f: { + 'lookup_expr': 'icontains', + }, + }, + models.BooleanField: { + 'filter_class': django_filters.BooleanFilter, + 'extra': lambda f: { + 'widget': forms.CheckboxInput, + }, + }, + } Request-based filtering diff --git a/docs/ref/filterset.txt b/docs/ref/filterset.txt index 2f4929e..409c07c 100644 --- a/docs/ref/filterset.txt +++ b/docs/ref/filterset.txt @@ -12,7 +12,7 @@ Meta options - :ref:`exclude ` - :ref:`form
` - :ref:`together ` -- filter_overrides +- :ref:`filter_overrides ` - :ref:`strict ` @@ -120,6 +120,36 @@ field set must either be all or none present in the request for fields = ['price', 'release_date', 'rating'] together = ['rating', 'price'] + +.. _filter_overrides: + +Customise filter generation with ``filter_overrides`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The inner ``Meta`` class also takes an optional ``filter_overrides`` argument. +This is a map of model fields to filter classes with options:: + + class ProductFilter(django_filters.FilterSet): + + class Meta: + model = Product + fields = ['name', 'release_date'] + filter_overrides = { + models.CharField: { + 'filter_class': django_filters.CharFilter, + 'extra': lambda f: { + 'lookup_expr': 'icontains', + }, + }, + models.BooleanField: { + 'filter_class': django_filters.BooleanFilter, + 'extra': lambda f: { + 'widget': forms.CheckboxInput, + }, + }, + } + + .. _strict: ``strict``