Django
でSQL
実行時にOR
句をたまに使うんですが、使い方を毎回忘れてしまってしまうので、OR
句の使い方をメモしておきます。
OR句の使い方
下記をインポートします。
from django.db.models import Q
「A
またはB
」という条件を検索したい場合、
queryset = queryset.filter(Q(condition_a='A') | Q(condition_b='B'))
「condition_a
」「condition_b
」は検索対象のフィールド、「A
」「B
」は検索条件に適宜置き換えてください。
パイプ(|)でQ
メソッドをつなげることでOR
条件のクエリを実行できます。
AND句とOR句の両方使いたい場合
AND
条件とOR
条件を混合で使いたい場合もあると思います。その場合は、
queryset = queryset.filter(Q(condition_a='A') | Q(condition_b='B'), condition_c='C')
こんな感じでOR
条件の後ろでカンマ(,)で条件をつなげるとOR
条件とAND
条件を両方使用することができます。
ちなみに、
queryset = queryset.filter(condition_c='C', Q(condition_a='A') | Q(condition_b='B'))
このようにAND
条件をOR
条件より前に記述するとエラーになりますので注意が必要です。
最後に
Django
のクエリセットを利用しているとModel
を操作する感覚になるので、実際のデータベースをイメージしにくくなり、クエリセットの検索条件を実装する時にどのように実装すればいいか分からなくなることもあると思います。その時は初心に帰った気持ちでSELECT
文を実際に作ってみて、そこからDjango
のクエリエセットに落とし込むことで自身の思考をシンプルにすることができると思います。
コメント