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'})})
Вернуться на верх