【发布时间】:2019-01-08 08:33:09
【问题描述】:
我想知道是否有一种方法可以根据过滤的值是否为None 有条件地过滤 Django 中的查询集。我知道你可以这样做:
some_name = 'Bob'
qs = MyModel.objects.filter(gender='boy')
if some_name:
qs = qs.filter(name=some_name)
我们有条件地过滤变量some_name 仅当它存在时。我很好奇是否可以使用单个查询语句复制此逻辑,而不是在过滤器上“链接”到查询集的末尾。所以这看起来像:
qs = MyModel.objects.filter(gender='boy').filter(name=some_name if some_name else None)
显然,该示例无效,因为它会过滤 name=None 而不是不过滤,但是有没有人找到一种方法来做我想做的事情?对于更长的嵌套查询,将所有内容放在一个语句中会非常有帮助。
【问题讨论】: