django-filter
allows you to easily declare filterable fields of a model.
For example,
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = ['username']
provides an exact
lookup for the username
field which is equivalent to this...
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = {
'username': ['exact']
}
I'm looking for a way support all possible lookup filters given the field so that I don't have to do this:
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = {
"username": ["exact", "iexact", "contains", "icontains", "startswith", ..., etc.]
}
Override the get_fields(...)
class method of FilterSet
class as,
import django_filters as filters
# If you are using DRF, import `filters` as
# from django_filters import rest_framework as filters
class AnyModelFilter(filters.FilterSet):
class Meta:
model = AnyModel
fields = '__all__'
@classmethod
def get_fields(cls):
fields = super().get_fields()
for field_name in fields.copy():
lookup_list = cls.Meta.model._meta.get_field(field_name).get_lookups().keys()
fields[field_name] = lookup_list
return fields