Django Logo

[Django]QuerySet での OR 句の使い方

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

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です