Django,检查是否存在,但检查属性数组中的许多项目

标签 django

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/

相关文章:

django - 更改 Django 开发服务器输出日志文本的颜色

python - django.db.utils.IntegrityError : (1062, "Duplicate entry ' ' 键 'slug' ")

当从 jQuery load() 调用 URL 时,javascript 未从 django 模板加载

django - 如何检索触发Elasticsearch查询命中的字段

python - 在忽略值的同时排序查询集

javascript - Websocket 服务器连接到 Django 以转发广播

python - 如何在 Django 中为子类的基类属性提供默认值?

python - 如何安全地计算 python 中的字典键

python - Django/Python 中的日常流程

python - Django 检查复选框是否被选中