I am using django-filter lib with DRF.
class OrganizationFilter(FilterSet):
class Meta:
model = Organization
fields = {
'city': ['iexact', 'contains'],
'zipcode': ['exact', 'contains']
}
city: CharField
I want to filter city field case-insensitive.
I can make it work by specifying the following.
class OrganizationFilter(FilterSet):
city = filters.CharFilter(lookup_expr='iexact')
...
Unless If I don't specify the lookup_expr it's not working.
I want to know why?
The reason why, is not working:
fields = {
'city': ['iexact', 'contains'],
'zipcode': ['exact', 'contains']
}
Is because you specified 'contains' next to 'iexact'. Contains will perform a case-sensitive lookup which will be in conflict with you're iexact lookup. So you're code should look like:
class OrganizationFilter(FilterSet):
class Meta:
model = Organization
fields = {
'city': ['iexact'],
'zipcode': ['exact', 'contains']
}