django“__contains”和“__in”作为单个查询

AJW*_*AJW 1 python django

我在 Django 中遇到一个相当奇怪的问题,我不知道如何在单个语句中组合“__contains”和“__in”。

所以,这是我的情况:我有一个条目列表,如下所示:

a = ["hgfjhgj89789jkbjk", "jhgjkhj89789jkhkjh", "jhgkjhkj89689gfghdfhg"]
Run Code Online (Sandbox Code Playgroud)

我想根据查询集检查此列表 - 我通常会这样做:

queryset = MyModel.objects.all().filter(my_field__in=a)
Run Code Online (Sandbox Code Playgroud)

然而,在我的情况下,my_field与中的值不完全匹配a,因此,我不得不__contains像这样求助:

queryset = MyModel.objects.all().filter(my_field__contains=a[0])
Run Code Online (Sandbox Code Playgroud)

..但是,我a现在有 2000 个条目,并且我无法运行上述查询 2000 次 - 听起来很愚蠢。

那么,如何将这个“__contains”与“__in”结合起来呢?抱歉,如果这是一个愚蠢的问题!

Ben*_*Ben 6

这无法通过一个过滤器来完成,但可以使用 Django 的Q对象来完成:

from django.db.models import Q

query = Q()
for entry in a:
    query = query | Q(my_field__contains=entry)

queryset = MyModel.objects.filter(query)
Run Code Online (Sandbox Code Playgroud)

Q对象可让您一次性执行复杂的查询 - 请查看文档以获取更多示例。