Django_filters filter_overrides не применяются к полям CharFields с вариантами выбора
Я объявил django_filters.FilterSet с классом Meta, в котором я хотел бы использовать filter_overrides для настройки некоторых фильтров. Я использую код, очень похожий на пример в официальной документации :
class AccommodationFilter(django_filters.FilterSet):
class Meta:
model = AccommodationOffer
fields = ['numberOfPeople', 'petsAllowed', 'typeOfResidence', 'startDateAccommodation' ]
filter_overrides = {
models.BooleanField: {
'filter_class': django_filters.BooleanFilter,
'extra': lambda f: {
'widget': forms.CheckboxInput(attrs={'class':'form-control', 'value' : 'true'}),
},
},
models.CharField: {
'filter_class': django_filters.ChoiceFilter,
'extra': lambda f: {
'widget': forms.Select(attrs={'class':'form-control'}),
},
},
}
Поля BooleanFields отображаются, как и ожидалось, однако, что бы я ни пробовал, поля CharFields (в которых заданы варианты выбора) не отображаются с атрибутом class="form-control"
Как указано в комментарии, это ошибка в django_filters. Пока эта проблема не будет решена, придется модифицировать код django_filters.
На случай, если кто-то столкнется с такой же проблемой, вот обходной путь, который я придумал:
class MyFilterSet(django_filters.FilterSet):
[...]
def __init__(self, data=None, queryset=None, *, request=None, prefix=None):
super().__init__(data, queryset, request=request, prefix=prefix)
for f in self.filters.values():
if isinstance(f, django_filters.ChoiceFilter):
f.extra.update({'widget': forms.Select(attrs={'class' : 'form-control'})})