Как изменить тип входа в Django_filter?

У меня есть форма Django_filters:

class ContainerFilter(django_filters.FilterSet):

    def __init__(self, *args, **kwargs):
        super(ContainerFilter, self).__init__(*args, **kwargs)
        self.filters['title'].label = 'Продукт'
        self.filters['status'].label = ' Первый Статус'
        self.filters['status1'].label = 'Второй Статус'

    start_date = DateFilter(label='Создан от', field_name='created', lookup_expr='gte')
    end_date = DateFilter(label='Создан до', field_name='created', lookup_expr='lte',)

    class Meta:
        model = Container
        fields = ('title', 'status', 'status1', 'warehouse', 'start_date', 'end_date')

Я хочу изменить тип ввода start_date с text на date. Я добавил виджеты в Meta, но он выдает ошибку, также я добавил виджеты в input, но он все равно не работает.

В вашем классе фильтров это очень просто:

from django import forms

class ContainerFilter(django_filters.FilterSet):

    def __init__(self, *args, **kwargs):
        super(ContainerFilter, self).__init__(*args, **kwargs)
        self.filters['title'].label = 'Продукт'
        self.filters['status'].label = ' Первый Статус'
        self.filters['status1'].label = 'Второй Статус'

    start_date = DateFilter(label='Создан от', field_name='created', lookup_expr='gte')
    start_date.field.widget = forms.DateInput(attrs={'type': 'date'})
    end_date = DateFilter(label='Создан до', field_name='created', lookup_expr='lte',)
    end_date.field.widget = forms.DateInput(attrs={'type': 'date'})

    class Meta:
        model = Container
        fields = ('title', 'status', 'status1', 'warehouse', 'start_date', 'end_date')

Если вы когда-нибудь будете использовать DateFromToRangeFilter, у меня есть решение с расширением класса SuffixedMultiWidget:

from django_filters.widgets import SuffixedMultiWidget

class MyRangeWidget(SuffixedMultiWidget):
    template_name = 'django_filters/widgets/multiwidget.html'
    suffixes = ['min', 'max']

    def __init__(self, attrs=None):
        widgets = (forms.DateInput(attrs={'type': 'date'}), forms.DateInput(attrs={'type': 'date'}))
        super().__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.start, value.stop]
        return [None, None]

Затем в filterset:

date_range = django_filters.DateFromToRangeFilter(widget=MyRangeWidget())
Вернуться на верх