Я относительно новичок в Django и столкнулся с проблемой, пытаясь отфильтровать дату. Я могу отфильтровать все другие значения, кроме даты. Это всего лишь одна дата, но я пытаюсь отфильтровать все регистры в заданном диапазоне, поэтому я добавил два фильтра, например:
class GamesFilter(FilterUserMixin):
[...]
date1 = django_filters.DateFilter(field_name='date1', method='filter_date', label='Start date')
date2 = django_filters.DateFilter(field_name='date2', method='filter_date', label='End date')
def filter_date(self,queryset,name,value):
if name == "date1":
queryset = queryset.filter(date__gte=value)
elif name == "date2":
queryset = queryset.filter(date__lte=value)
return queryset
class Meta:
model = Game
fields = ('team1','result','status','tourney','date1','date2')
В своем formhelpers.py я добавил:
class GamesFormHelper(FormHelper):
[...]
layout = Layout(
'team1','result','status','tourney','date1','date2',
Submit('filter','Filter',css_class='btn-default')
)
Модель "Game" имеет только параметр "date", а не "date1" и "date2", но я не смог найти способ отображения двух фильтров на веб-странице без добавления "date1" и "date2" в классе Meta of GamesFilter и в FormHelper.
Я полагаю, что должен быть гораздо лучший и функциональный способ добиться этого, но я не смог найти ничего, что работает. Я попытался использовать DateFromToRangeFilter вместо DateFilter, но тогда он не отображает средство выбора даты, добавленное мной на html (и появляется только одно текстовое поле, которое не позволяет искать в диапазоне).