モデルからデータを検索するときに除外する条件を指定したい時があります。
この記事では、モデルのデータの取得条件に除外する条件を指定する方法を解説します。
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オブジェクトを使って対処することもできます。
コメントを残す