django" __包含"和" __ in"作为单个查询

时间:2015-05-24 19:28:11

标签: python django

我在Django中有一个相当奇怪的问题,在那里我看不出我怎么能结合起来" __包含"和" __ in"在一个声明中。

所以,这是我的情况:我有一个像这样的条目列表:

a = ["hgfjhgj89789jkbjk", "jhgjkhj89789jkhkjh", "jhgkjhkj89689gfghdfhg"]

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

queryset = MyModel.objects.all().filter(my_field__in=a)

但是,在我的情况下,my_fielda中的值不完全匹配,因此,我不得不诉诸__contains,如此:

queryset = MyModel.objects.all().filter(my_field__contains=a[0])

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

那么,我怎样才能将这个" __包含" " __ in"? 对不起,如果这是一个愚蠢的问题!

1 个答案:

答案 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允许您一次性执行复杂查询 - 查看文档以获取更多示例。