Django モデルの検索条件に除外する条件を指定する方法

モデルからデータを検索するときに除外する条件を指定したい時があります。

この記事では、モデルのデータの取得条件に除外する条件を指定する方法を解説します。

exclude()を使う方法

exclude()を使うと除外する条件を指定できます。

次の例は、名前(username)に’太朗’を含まないユーザーを取得しています。

User.objects.exclude(username__contains='太朗')

excludeのキーワード引数に条件を複数書いた場合、

not (A and B and ・・・)

の条件になります。(A、Bはキーワード引数です)

次の例は、誕生日(birth)が2000年1月1日以降で、ステータス(status)がFalseでないユーザーを取得しています。

User.objects.exclude(birth__gt=datetime.date(2000, 1, 1), status=False)

exclude()を連結した場合、 (not A) and (not B) and ・・・の条件になります。

次の例は、誕生日(birth)が2000年1月1日以降でない、かつ、ステータス(status)がFalseでないユーザーを取得しています。上記の方法より条件が厳しくなっています。

User.objects.exclude(birth__gt=datetime.date(2000, 1, 1)).exclude(is_active=True)

Qオブジェクトを使う方法

検索条件が複雑でexclude()では対応できない場合は、Qオブジェクトを使う対処法もあります。

Qオブジェクトに~演算子を使うと否定の条件になります。

次の例は、idが1以外のユーザーを取得します。

from django.db.models import Q

User.objects.filter(~Q(id=1))

まとめ

exclude()を使って除外する条件を指定する事ができます。

検索条件が複雑でexclude()では対応できない場合は、Qオブジェクトを使って対処することもできます。

スポンサーリンク
スポンサーリンク