注释:给定值是不是存在于 m2m 字段中

Posted

技术标签:

【中文标题】注释:给定值是不是存在于 m2m 字段中【英文标题】:annotate: whether a given value exists in m2m field注释:给定值是否存在于 m2m 字段中 【发布时间】:2020-03-28 13:07:59 【问题描述】:

我有一个查询可以检索这样的对象:


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

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


    "id": 1,
    "tagged": true

这是我想出来的

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

由于关系tags 已经被主查询加载,所以对我来说,有一个辅助查询似乎是多余的。

有没有更简单的方法来构造这个查询?类似于过滤器in 查找语法的东西。

【问题讨论】:

【参考方案1】:

假设 tags 是一个 ArrayField

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

【讨论】:

以上是关于注释:给定值是不是存在于 m2m 字段中的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何聚合/注释多对多关系?

参数作为字段的名称而不是值进入数组

如果字段值在外部列表中,Django 注释布尔值

注释另一个模型中的字段值出现次数

java注释的java注解

powerdesigner 字段添加注释和默认值