1. ホーム
  2. パイソン

django orm で存在する条件付きフィルタを書く

2022-03-02 21:42:49

SQL の exists サブクエリを django の orm で表現するのはちょっと面倒で、次の2つの部分を行う必要があります。

from django.db.models import Exists, OuterRef


# 1. define the subquery conditions
relative_comments = Comment.objects.filter(
    post=OuterRef('pk'), # Note the foreign key association: post is a field in the Comment table, pk means it is associated with another table primary key
)

# 2. use annotate and filter together to define subqueries
Post.objects.annotate( # Use exists to define an additional field
    recent_comment=Exists(recent_comments),
).filter(recent_comment=True) # Implement exists subquery filtering by checking the extra field in the condition




これは少しトリッキーなので、他の簡単な方法があれば自由にシェアしてください。

公式サイトの参考  https://docs.djangoproject.com/en/2.1/ref/models/expressions/#filtering-on-a-subquery-expression