django で三つのテーブルを結合して filter をした時に躓いたのでメモ
構造
よくある Tag 付けの構造です。
Point と Tag のテーブルがあり、それを紐づける TagManager というテーブルがあります。
関係性は ManyToMany です。
この Tag 側にフィルターをかけようとしましたが躓いたのでメモしておきます。
コード
【NGなコード】
points = Point.objects.prefetch_related(
Prefetch(
"tagmanager_set", queryset=TagManager.objects.select_related("tag").filter(tag__id__in=tag_ids)
)
).filter(name__contains=searchText,)
【OKなコード】
points = Point.objects.prefetch_related(
Prefetch(
"tagmanager_set", queryset=TagManager.objects.select_related("tag").all()
)
).filter(name__contains=searchText, tagmanager__tag_id__in=tag_ids)
ディスカッション
コメント一覧
まだ、コメントがありません