检查列表中的每个值是否存在于单个查询中给定的 Django 模型表中

Ale*_*vić 3 python mysql django django-models

假设我想实现这个通用函数:

def do_exist(key:str, values:list[any], model: django.db.models.Model) -> bool
Run Code Online (Sandbox Code Playgroud)

它检查所有给定值是否存在于key单个查询中指定的给定模型的列中。我已经实现了这样的东西

from django.db.models import Exists
def do_exist(key, values, model):
    chained_exists = (Exists(model.objects.filter(F(key)=value)) for value in values)
    qs = model.objects.filter(*chained_exists).values("pk")[:1] 
    # Limit and values used for the sake of less payload
    return len(qs) > 0
Run Code Online (Sandbox Code Playgroud)

它生成一个非常有效的 SQL 查询,但让我害怕的是,如果我尝试将评估方法调用附加到qslike.first()而不是[:1]或.exists()MYSQL 连接会丢失。有谁有更优雅的方法来解决这个问题?

AKX*_*AKX 7

如果您知道您正在传递Npks,那么count()由这些 pks 过滤的查询应该具有准确的N结果。

def do_exist(model, pks):
    return model.objects.filter(pk__in=pks).count() == len(pks)
Run Code Online (Sandbox Code Playgroud)