Как фильтровать по диапазону дат с помощью встроенного в 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
Вернуться на верх