我想按开始日期和结束日期均为可选的日期范围过滤查询集。特别,

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。但是,关于链接多个过滤器的行为的文档非常混乱(请参阅Chaining multiple filter() in Django, is this a bug?),而且我不确定上述内容是否按照我的想法做(它可以对过滤器进行“或”运算,而不是对它们进行“与”运算)。

上面的代码是否实现了我想要的功能(即,两个过滤器),或者还有其他方法可以实现?

最佳答案

对于这类问题,我有一个通用的解决方案。对所有模型重复使用此custom queryset

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)

关于python - 按可选的开始和结束日期过滤查询集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41539976/

10-14 18:50