У меня есть date_from
, date_to
, studentA
и studentB
фильтры.Фильтры для удаления и удаления django
Я хочу, чтобы иметь возможность фильтровать данные, используя один из них, некоторые из них, все или ни один из них за раз. Ни одно из них не означает, что все данные представлены - фильтры не применяются.
Скажем, я выбрал фильтр по диапазону дат и отправлен. Мне представлены данные выбранного периода. Теперь, если я очищаю форму (критерий фильтра диапазона дат), все данные должны появляться снова - поскольку фильтры не используются.
Чтобы сделать эту работу я определил состояние в моем views.py
:
if ( form.is_valid()
and len(request.GET['date_from']) > 0
and len(request.GET['date_to']) > 0
):
date_from = form.cleaned_data['date_from']
date_to = form.cleaned_data['date_to']
attendance = Students.objects.filter(
date__range=(date_from, date_to))
Если у меня не было это условие, то, когда я очистил фильтры с шага выше данные не будут выскочить обратно.
Когда у меня есть один или два фильтра, это не проблема, но по мере появления большего количества фильтров код начинает быстро расти - мне нужно сделать много сообщений elif
, например.
elif ( form.is_valid()
and len(request.GET['date_from']) > 0
and len(request.GET['date_to']) > 0
and len(request.GET['studentA']) > 0
):
# apply this filter
elif ( form.is_valid()
and len(request.GET['studentA']) > 0
):
# apply this one
и так далее.
Мой вопрос в том, есть ли альтернатива, менее подробный, способ применения и удаления фильтров взад и вперед (я уверен, что есть)?
Я использовал его некоторое время, но, насколько мне известно, он не поддерживает фильтр диапазона дат с настраиваемыми датами, и это важно для меня. Спасибо за вход в любом случае. – nutship
У этого есть 'DateRangeFilter', но он выпадает с такими параметрами, как« На этой неделе »,« Этот месяц »и т. Д. Если вам нужен фильтр диапазона с одной начальной датой и другим фильтром даты окончания, вы можете просто добавить 2 фильтра даты. (См. Обновленный ответ) – jproffitt
Вы экономите мой день :) Я буду возиться с ним и вернуться, чтобы принять ваш ответ. Спасибо! – nutship