Как изменить тип входа в 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())