【问题标题】: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 查找语法的东西。

【问题讨论】:

    标签: python django django-rest-framework django-queryset drf-queryset


    【解决方案1】:

    假设 tags 是一个 ArrayField

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

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      相关资源
      最近更新 更多