Annotate:M2M字段中是否存在给定值

annotate: whether a given value exists in m2m field(Annotate:M2M字段中是否存在给定值)

本文介绍了Annotate:M2M字段中是否存在给定值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个检索对象的查询,如下所示:

{
    "id": 1,
    "tags": [1, 2, 3]
}

我想检查Object的tags字段中是否存在给定的标记(比如1),annotate检查的结果作为Object的字段:

{
    "id": 1,
    "tagged": true
}

这就是我想出来的

annotate(
    tagged=Exists(
        Articles.tag_set.through.objects.filter(
            article_id=OuterRef("pk"), tag_id=tag.id
        )
    )
)

由于关系tags已由主要查询加载,因此具有辅助查询对我来说似乎是多余的。

有没有更简单的方法来组织此查询?与过滤in查找语法相似的内容。

推荐答案

假设标记为数组字段

    q = Article.objects.annotate(
        tagged=Exists(
            Article.objects.filter(id=OuterRef('id'), tags__contains=[1])
        )
    )

这篇关于Annotate:M2M字段中是否存在给定值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:Annotate:M2M字段中是否存在给定值

基础教程推荐