Как фильтровать по диапазону дат с помощью встроенного в Djangos ListView?
Я совсем новичок в Django, и везде, где я ищу, кажется, предлагается решение, которое работает для общих представлений на основе функций, или очень усложняет то, что я пытаюсь сделать с представлением на основе классов.
Все, что я хочу сделать, это отфильтровать результаты из ListView, чтобы включить только записи из выбранного диапазона дат.
Например, у меня есть общий вид, основанный на классах:
class HomeView(ListView):
model = Post
template_name = 'home.html'
который возвращает все записи моего блога
и очень простой селектор даты на моей странице home.html:
From date: <input type="date" name="fromdate"/>
To Date: <input type="date" name="todate"/>
<input type="submit" value="search"/>
Как я могу взять ввод из простого диапазона дат и изменить мое представление на основе класса, чтобы: ЕСЛИ выбран диапазон дат: показывать только посты из этого диапазона дат?
Заранее спасибо. Я проверил и не могу найти нигде ответа на этот вопрос, который бы использовал ListView или не переусложнял проблему и не становился почти невозможным для новичка
Спасибо
Один из простых способов - переопределить кейсет. Получите daterange из запроса и отфильтруйте набор queryset с его помощью.
class HomeView(ListView):
model = Post
template_name = 'home.html'
def get_queryset(self):
from_date = self.request.GET.get('fromdate')
to_date = self.request.GET.get('todate')
self.queryset = Post.objects.all()
if from_date:
self.queryset.filter(from_date__gte=from_date)
if to_date:
self.queryset.filter(to_date__lte=to_date)
return self.queryset