3

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

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 中链接多个过滤器(),这是一个错误吗?),而且我不确定上面的内容是否符合我的想法(它可能或过滤器而不是与它们)。

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

4

1 回答 1

1

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

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)
于 2017-01-09T09:26:24.563 回答