按可选的开始和结束日期筛选查询集



我想按日期范围过滤查询集,其中开始日期和结束日期都是可选的。具体说来

if dt_from:
    results = results.filter(date_modified__gte=dt_from)
if dt_until:
    results = results.filter(date_modified__lte=dt_until)

其中dt_fromdt_until分别是datetime.datetimedatetime.dateNone。然而,关于链接多个过滤器的行为的文档非常令人困惑(参见 Django 中的链接多个 filter(),这是一个错误吗?),我不确定上面是否做了我认为它所做的(它可能或过滤器而不是 AND)。

上面的代码是否实现了我想要的(即 AND 两个过滤器),还是有另一种方法应该这样做?

我有一个针对此类问题的通用解决方案。 对所有模型重用此自定义查询集

class MyQuerySet(models.QuerySet):
    def filter_if(self, **kwargs):
        new_kwargs = {a: b for (a, b) in kwargs.items() if b}
        return self.filter(new_kwargs)
results.filter_if(date_modified__gte=dt_from, date_modified__lte=dt_until)

最新更新