小编Jaf*_*fes的帖子

Django:使用 Q 对象进行列表理解

据我所知,您可以创建一个过滤器列表,然后只需在 filter() 或 except() 方法中解压该列表即可。看起来超级方便。

我尝试这样做:

words_to_exclude = ['one', 'two', 'three']
excluded_clauses = [Q(title__icontains=word) for word in words_to_exclude]
search_result = MyObject.objects.exclude(*excluded_clauses)
Run Code Online (Sandbox Code Playgroud)

查询有效,但有一个问题。如果我使用此方法创建过滤器列表,则此列表(excluded_clauses)将如下所示:

[<Q: (AND: ('title__icontains', 'one'))>, <Q: (AND: ('title__icontains', 'two'))>, <Q: (AND: ('title__icontains', 'three'))>]
Run Code Online (Sandbox Code Playgroud)

这些是带有 AND 运算符的 Q 对象,因此查询集将仅排除不包含所有单词的对象。我需要它来排除标题包含任何单词的结果,所以我需要 OR 运算符。我可以手动更改 Q 对象中的运算符吗?或者没有办法像这样使用列表理解?抱歉,我知道如何手动编写过滤器,但我需要这个来实现参数数量未指定的过滤器函数。

python django

1
推荐指数
1
解决办法
58
查看次数

标签 统计

django ×1

python ×1