Append an entry per view to the DEFAULT_FILTER_BACKENDS

In a Django (and DRF) project with a large number of views we have set a list of filter backends in

        # filter backend classes
    # other settings

Some of the view classes need additional filter backends. We can specify the attribute filter_backends per view class:

    filter_backends = [DefaultFilterOne, DefaultFilterTwo, DefaultFilterThree, AdditionalFilter]

However, this is not DRY. Here in this example three (3) filter backends are default and have to be repeated in the viewset class. If there's a change in it has to be reflected in the view class.

What is best practice to append an additional filter backend per class, while keeping the default filter backends from

Thanks to the hint from @LiorA I solved this issue. This is how I did it:

from rest_framework.settings import api_settings
from rest_framework import viewsets

class FooViewSet(viewsets.ModelViewSet):
    filter_backends = api_settings.DEFAULT_FILTER_BACKENDS + [AdditionalFilter]

Here api_settings.DEFAULT_FILTER_BACKENDS fetches the entry "DEFAULT_FILTER_BACKENDS" from REST_FRAMEWORK in While the entries in the settings are paths as strings, api_settings converts the values to class references.

Back to Top