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
のクエリエセットに落とし込むことで自身の思考をシンプルにすることができると思います。
コメント