カテゴリ: Django 更新日: 2026/04/05

Django ORMのexcludeで条件除外する方法|初心者向けに使い方とよく使うパターンを解説

Django ORMのexcludeで条件除外する方法|よく使うパターン
Django ORMのexcludeで条件除外する方法|よく使うパターン

先生と生徒の会話形式で理解しよう

生徒

「Djangoでデータを検索するとき、いらないデータを外す方法ってありますか?」

先生

「あります。Django ORMでは、excludeという仕組みを使うと、特定の条件に当てはまるデータを除外できます。」

生徒

「除外って、検索しないってことですか?」

先生

「その通りです。では、Django ORMのexcludeの基本から順番に見ていきましょう。」

1. Django ORMとexcludeの基本的な考え方

1. Django ORMとexcludeの基本的な考え方
1. Django ORMとexcludeの基本的な考え方

Django ORMとは、データベースを直接操作する代わりに、Pythonのコードでデータを扱える仕組みです。難しいSQLを書かなくても、モデルを使って直感的にデータを取得できます。

excludeは、「この条件に当てはまるデータを表示しない」という意味を持ちます。イメージとしては、たくさん並んだ箱の中から「赤い箱以外」を選ぶような感覚です。

2. excludeの基本構文を理解しよう

2. excludeの基本構文を理解しよう
2. excludeの基本構文を理解しよう

Django ORMでのexcludeは、objects.exclude()という形で使います。まずは一番シンプルな例を見てみましょう。


from blog.models import Article

articles = Article.objects.exclude(status="draft")

このコードは、「statusがdraft(下書き)ではない記事」を取得しています。つまり、下書きの記事を除外して、公開されている記事だけを取り出すという意味です。

3. 数値を使ったexcludeのよくある使い方

3. 数値を使ったexcludeのよくある使い方
3. 数値を使ったexcludeのよくある使い方

数値データでもexcludeはよく使われます。例えば、価格が0円の商品を除外したい場合です。


from shop.models import Product

products = Product.objects.exclude(price=0)

これは「priceが0ではない商品」を取得しています。無料の商品を一覧から外したいときなどに便利です。

4. 複数条件でexcludeする方法

4. 複数条件でexcludeする方法
4. 複数条件でexcludeする方法

excludeは、条件を複数指定することもできます。この場合、「すべての条件に当てはまるデータ」を除外します。


from users.models import User

users = User.objects.exclude(is_active=False, age=0)

この例では、「無効なユーザー」かつ「年齢が0のユーザー」を除外しています。条件が増えても、カンマで区切るだけなので初心者でも扱いやすいです。

5. excludeと比較条件(大なり・小なり)

5. excludeと比較条件(大なり・小なり)
5. excludeと比較条件(大なり・小なり)

Django ORMでは、__gt(より大きい)や__lt(より小さい)といった比較も使えます。


from orders.models import Order

orders = Order.objects.exclude(total_price__lt=1000)

これは「合計金額が1000未満の注文」を除外しています。条件に当てはまらないデータだけを残す、という考え方が大切です。

6. excludeと文字列検索の組み合わせ

6. excludeと文字列検索の組み合わせ
6. excludeと文字列検索の組み合わせ

文字列の一部を条件にして除外することもできます。例えば、特定の単語を含むデータを外したい場合です。


from blog.models import Article

articles = Article.objects.exclude(title__contains="テスト")

このコードは、「タイトルに『テスト』という文字が含まれていない記事」を取得します。本番環境でテスト用データを除外したいときに役立ちます。

7. filterとの違いをイメージで理解しよう

7. filterとの違いをイメージで理解しよう
7. filterとの違いをイメージで理解しよう

filterは条件に「当てはまるものだけ」を集めます。一方、excludeは条件に「当てはまるものを外す」動きです。

お店で「甘いお菓子だけ選ぶ」のがfilter、「辛いお菓子を外す」のがexclude、と考えると分かりやすいでしょう。どちらもDjango ORMではとても重要な基本操作です。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

excludeは「条件の否定」を書いているわけではなく、「条件に当てはまるデータを除外する」という点がポイントです。最初は頭が混乱しやすいですが、実際のデータを想像しながら読むと理解しやすくなります。

Django ORMのexcludeは、データベース検索を柔軟にするための大切な仕組みです。基本パターンを覚えることで、実務でも安心して使えるようになります。

まとめ

まとめ
まとめ

ここまで、Django ORMのexcludeを使った条件除外の方法について、基礎から具体例まで丁寧に見てきました。excludeは「条件に当てはまるデータを取得しない」というシンプルな考え方ですが、実際のWebアプリケーション開発では非常に出番が多く、Django初心者から実務経験者まで幅広く使われています。特に、下書きデータを除外したり、テスト用データを一覧から外したり、不要なレコードを画面に表示しないようにしたりと、現場で役立つ場面がたくさんあります。

Django ORMは、SQLを書かずにPythonコードだけでデータベース操作ができる点が大きな魅力です。その中でもexcludeは、filterと並んで検索処理の基本となる存在です。filterが「条件に一致するものを集める」のに対し、excludeは「条件に一致するものを取り除く」という逆の発想になります。この違いをしっかり理解することで、検索ロジックを頭の中で整理しやすくなり、コードの読み書きもスムーズになります。

また、数値条件や文字列検索、比較演算子との組み合わせ、複数条件指定など、excludeは非常に柔軟です。単純な一致条件だけでなく、__ltや__gt、__containsなどを活用することで、細かい条件除外も簡単に実装できます。これはDjango ORMの強みであり、データベース設計やモデル設計と合わせて理解しておくことで、より効率的なアプリケーション開発につながります。

例えば、記事管理システムで「下書き以外の記事を表示する」「テスト用タイトルを含む記事を除外する」といった要件はよくあります。そのような場合でも、excludeを使えば直感的で読みやすいコードを書くことができます。以下は、これまでの内容を振り返る意味でのシンプルなサンプルです。


from blog.models import Article

# 下書き記事を除外して取得
articles = Article.objects.exclude(status="draft")

このように、Django ORMのexcludeを使うことで、「表示したくないデータ」を明確にコントロールできます。データベース検索の意図がコードから読み取りやすくなるため、保守性の高いプログラムを書くうえでも重要なポイントです。初心者のうちはfilterとの違いで混乱しがちですが、実際に手を動かして何度も使うことで、自然と理解が深まっていきます。

先生と生徒の振り返り会話

生徒

「excludeって最初は難しそうに感じましたけど、実は『いらないデータを外す』だけなんですね。filterと比べると考え方が逆で面白いです。」

先生

「そうですね。Django ORMでは、この逆の発想を理解できるかどうかが大切です。excludeは実務でも本当によく使いますよ。」

生徒

「下書きの記事やテストデータを除外する場面を想像すると、すごく実用的だと感じました。コードも読みやすいですね。」

先生

「その通りです。Django ORMは『読みやすさ』を大切にしています。excludeを使うと、何を除外したいのかが一目で分かります。」

生徒

「filterとexcludeをうまく使い分けられるようになれば、検索処理で困ることが減りそうですね。」

先生

「ええ。その感覚が身につけば、Djangoでのデータ取得はかなり楽になります。まずは基本パターンをしっかり覚えて、少しずつ応用していきましょう。」

カテゴリの一覧へ
新着記事
New1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
New2
Django
Djangoテンプレートタグ完全リスト|if・for・extends・includeの基礎を超初心者向けに解説
New3
Django
Djangoとは?Pythonフレームワークの特徴を初心者向けにやさしく解説
New4
Django
Djangoが人気の理由をやさしく解説!初心者でもわかる高速開発・ORM・管理画面
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Flask
PythonのFlaskで言語を自動判別!ユーザーに合わせた表示切り替えの仕組みを徹底解説
No.3
Java&Spring記事人気No3
Flask
PythonのFlaskでURLに言語コードを含める方法!多言語ルーティングの実装ガイド
No.4
Java&Spring記事人気No4
Python
PythonでCassandraに接続する方法を完全ガイド!cassandra-driverの使い方
No.5
Java&Spring記事人気No5
Python
Pythonの変数宣言と型ヒントの使い方!初心者向けに基礎をやさしく解説
No.6
Java&Spring記事人気No6
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.7
Java&Spring記事人気No7
Python
PythonでRedisをキャッシュとして活用!アプリを爆速にする方法を徹底解説
No.8
Java&Spring記事人気No8
Python
Pythonの関数を使ったカスタムソート(keyパラメータ)をわかりやすく解説!初心者でも使える並べ替えテクニック