Django入門|excludeで特定レコードを除外する方法のイメージ画像

Django入門|excludeで特定レコードを除外する方法

  • 公開日:2020/02/06
  • 更新日:2020/02/07
  • 投稿者:n bit

Djangoで特定の条件に該当するレコードを除外したクエリセットの一覧を取得したいときに利用するexcludeの利用方法を解説します。

  • Python
  • Django

この記事は約 分で読めます。(文字)

excludeで特定レコードを除外する方法

通常Djangoで特定の条件に該当するレコードを含んだクエリセットを取得する場合に利用されるのは「filter」です。例えば、以下の例では「kw」フィールドに「テスト」と言う文字列を含んだクエリセットが取得されます。

result = ModelName.objects.filter(kw__icontains='テスト')

excludeはfilterの反対で除外に利用する

今回のケースはその逆で特定の条件に該当するレコードを除くクエリセットを取得したいといった用途に利用するもので「exclude」を利用します。

利用方法はfilterの時と同じで「モデル名.objects」の後に「exclude」をつけて括弧内に条件を指定することで、その条件に該当するレコードを全て除いてくれます。

  • モデル名.objects.exclude(条件)

実際のコードを確認しておきましょう。

result = ModelName.objects.exclude(kw__icontains='テスト')

このコードの例では「kw」フィールドに「テスト」と言う文字列を含んだレコードを全て除外したクエリセットが取得されます。

「除く」と言うことさえ理解しておけば利用方法はfilterとほぼ同じですので慣れてしまえばそんなに難しくはないでしょう。

今日のdot

excludeを覚えておくとDjangoで「除く」を含めた複雑な条件指定ができますので、より柔軟なフィルタリングを行ったクエリセットを取得することができます。filterやQ等と組み合わせることでGoogle検索のようにアンド検索と除外を1度に実行して情報を検索することもできますね。

実際に当サイト内の検索機能にもexcludeを利用してマイナス記号をつけた除外検索ができるようにしました。いろいろと活用の幅が広がりますので利用してみてください。