我在 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”结合起来呢?抱歉,如果这是一个愚蠢的问题!
这无法通过一个过滤器来完成,但可以使用 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对象可让您一次性执行复杂的查询 - 请查看文档以获取更多示例。
| 归档时间: |
|
| 查看次数: |
4447 次 |
| 最近记录: |