如何使用内置在 ListView 中的 Djangos 按日期范围进行过滤?

How Can I Filter By Date Range Using Djangos Built in ListView?

我是 Django 的新手,我所看到的任何地方似乎都提供了一种适用于基于通用函数的视图的解决方案,或者确实使我尝试使用基于 class 的视图所做的事情过于复杂。

我想要做的就是过滤掉 ListView 的结果,只包含选定日期范围内的条目。

例如,我有一个基于 Class 的通用视图:

class HomeView(ListView):
model = Post
template_name = 'home.html'

returns 我所有的博文

我的 home.html 页面上有一个非常简单的日期选择器:

From date: <input type="date" name="fromdate"/>
To Date: <input type="date" name="todate"/>
<input type="submit" value="search"/>

如何从简单的日期范围获取输入并将基于 class 的视图更改为: 如果已选择日期范围:仅显示该日期范围内的帖子?

提前谢谢你。我已经检查过,但我看不到任何使用 ListView 的地方已经回答了这个问题,或者没有使问题过于复杂并且对于初学者来说几乎不可能遵循

谢谢

一种简单的方法是覆盖查询集。

从请求中获取日期范围,并使用它过滤查询集。

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