【Python・Django】リレーション先のモデルを使った条件検索の方法

【Python・Django】リレーション先のモデルを使った条件検索の方法


# django # python

どうも駆け出しエンジニアです。 周りの人より何年か遅れてエンジニアデビュー果たしました。他で学んだことは死んでも活かして食らいつく ということで、これからお仕事で使うPythonやDjnagoについて、学んだことや詰まったことを記事にしていきます!!

環境

Python:3.65 Django:2.1

リレーション先のモデルを使った条件検索の方法

知ってる人からしたら本当に大したことのない情報だと思います。Django便利だもん。フルスタックフレームワークだもん。

フィルターの中で「リレーション先のモデル名+__+カラム名」というように指定をしてあげるだけです。

なお、ForeignKey,ManyToManyFieldなどを使用モデル上でモデル間の関係を定義していることが前提です。 モデル上で定義した関係を元に、裏でjoinをしてくれているそうです。なんと便利なことか。 (していない場合は頑張るのかな、どうするのかな…)

以下コードのイメージです。

from app.models import main, relation
main.objects.all().filter(relation__column=something)

ただ、注意点としてこのままでももちろん動作としては問題ないのですが、パフォーマンスに影響の出やすい1対多問題などが発生することが多々あるのがDjangoのORMの難しいところです。 (きちんと対処方法は用意されているので、どこか理解したタイミングでまとめるかも)

参考公式ドキュメント

https://docs.djangoproject.com/ja/2.1/topics/db/queries/#field-lookups-intro

今回は以上です。こつこつ積み重ねてゆきます。 実務を通してDjango、Python、プログラミングの修行の道筋・こんなことに悩んでるんだよということが伝われば幸いです。