Search code examples
djangodjango-rest-frameworkdjango-filter

Django-filter field name is a python builtin keyword


I'm trying to rebuild a legacy API with DRF and django-filter. One of the field names is from, but

from = DateTimeFilter(field_name="created_dt", lookup_expr="gte")

is not valid Python. Can I name the variable

from_ = DateTimeFilter(...)

but still expose the API parameter as ?from= to users?


Solution

  • Override the __init__() method of FilterSet class

    from django_filters import rest_framework as drf_filters
    
    
    class FooFilterSet(drf_filters.FilterSet):
        foo = drf_filters.CharFilter()  # some random field
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.filters["from"] = drf_filters.DateTimeFilter(field_name="created_dt", lookup_expr="gte")
    
        class Meta:
            model = Foo
            fields = ('foo', 'from')