arr = [
{id: 1, filename: "a"},
{id: 2, filename: "b"},
]
如果我想检查 Django 表是否有 2 个项目具有与上述对应的属性,我可以这样做:
for n in arr:
e = MyTable.objects.filter(id=n["id"], filename=n["filename"]).exists()
if not e: # raise error
但这需要对数组中的每一项进行一次查询。
如何在单个查询中执行此操作?
我想像这样链接 Q
:
Q(id=n['id'],filename=n['filename']) | Q(id=n['id'],filename=n['filename']) | ...for each item in array
但是我该如何检查每个单独的 Q 是否至少返回一个条目?
我不关心循环 arr 只要我不为每次迭代做查询。
最佳答案
根据您的评论,arr
中的项目都有一个distinct id
,因此我们可以统计满足此条件的项目数健康)状况。我们知道这应该与arr
中的字典数量相同,因为每个Q(id=..., ...)
最多可以满足一条记录:
from functools import reduce
from operator import or_
MyTable.objects.filter(
reduce(or_, [Q(id=n['id'],filename=n['filename']) for n in arr])
).count() <b>== len(arr)</b>
关于Django,检查是否存在,但检查属性数组中的许多项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57806760/