我在Django中有一个相当奇怪的问题,在那里我看不出我怎么能结合起来" __包含"和" __ in"在一个声明中。
所以,这是我的情况:我有一个像这样的条目列表:
a = ["hgfjhgj89789jkbjk", "jhgjkhj89789jkhkjh", "jhgkjhkj89689gfghdfhg"]
我想针对查询集检查此列表 - 我通常会这样做:
queryset = MyModel.objects.all().filter(my_field__in=a)
但是,在我的情况下,my_field
与a
中的值不完全匹配,因此,我不得不诉诸__contains
,如此:
queryset = MyModel.objects.all().filter(my_field__contains=a[0])
..但是,我的a
现在有2000个条目,我无法运行上述查询2000次 - 听起来很傻。
那么,我怎样才能将这个" __包含" " __ in"? 对不起,如果这是一个愚蠢的问题!
答案 0 :(得分:2)
使用一个过滤器无法做到这一点,但可以使用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)
Q
objects允许您一次性执行复杂查询 - 查看文档以获取更多示例。