Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查询中的django连接筛选器_Python_Django_Django Queryset - Fatal编程技术网

Python 查询中的django连接筛选器

Python 查询中的django连接筛选器,python,django,django-queryset,Python,Django,Django Queryset,考虑一个标记数组,T 每个PhotoSet都与标记有多对多关系 我们还有一个过滤器F(由一组标签组成),我们希望返回所有包含F中所有标签的照片集 i、 e,。如果F=['green'、'dogs'、'cats'],我们希望每个PhotoSet实例都具有F中的所有标记 自然地 PhotoSet.objects.filter(tags__in=F) 不执行此操作,因为它返回包含F的任何成员的每个PhotoSet 我知道可以用“Q”表达式使用类似的东西,但这似乎只适用于有限数量的连接参数。这是可以通

考虑一个标记数组,T

每个PhotoSet都与标记有多对多关系

我们还有一个过滤器F(由一组标签组成),我们希望返回所有包含F中所有标签的照片集

i、 e,。如果F=['green'、'dogs'、'cats'],我们希望每个PhotoSet实例都具有F中的所有标记

自然地

PhotoSet.objects.filter(tags__in=F)
不执行此操作,因为它返回包含F的任何成员的每个PhotoSet

我知道可以用“Q”表达式使用类似的东西,但这似乎只适用于有限数量的连接参数。这是可以通过列表理解来完成的吗

提前谢谢

编辑--解决方案:

我用一种显而易见的方法找到了解决办法。简单地链接过滤器

results = PhotoSets.objects
for f in F:
  results = results.filter(tags__in=[f])
results = results.all()

一直盯着我的脸看

有点快,有点脏,但它会起作用:

query = None
for tag in F:
    if query is None:
        query = Q(tags=tag)
    else:
        query &= Q(tags=tag)

PhotoSet.objects.filter(query)

谢谢你的回复。如果我想出的解决方案不起作用,我会试试的。顺便说一句,你知道哪种方法最有效吗?它们的效率应该相当。无论哪种方式,数据库实际上只被命中一次,查询应该大致相同。