Django|filter lookupの使い方を解説【実例付】

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2021年12月)

「filterメソッドを使いこなしたい!」

「部分一致でfilterする方法が知りたい!」

というDjangoユーザーへ向けての記事となります

当記事を通じて、

  • filterメソッドを使いこなすための「フィールドルックアップ」

についてを徹底解説していきます!

当記事を読み進めれば、「フィールドルックアップとは何か」「フィールドルックアップの使い方」がマスターできるように構成しています

運営者プロフィール

運営者プロフィールアイコン

現在はIT企業のプロダクトマネージャーとして、個人向け/社内向けシステムなど、複数のシステム開発・運営に携わっています。

Webサイト構築やECサイトの開発経験に加えて、PythonなどのプログラミングやSalesforceなどのクラウドアプリケーションに関する幅広い知識・経験を活かして「プログラミング初心者がスムーズに学べるサイト」を目指しています。

Githubでは、趣味で作成したアプリなどを公開しています。

https://github.com/Yulikepython/

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

フィールドルックアップとは?

filterメソッドの基本的な使い方として、

<QuerySet>.objects.filter(フィールド名=”値”)

「=」を使うことが多いかと思います

もちろん有効な使い方ではありますが、filterメソッドでは「=」(完全一致)だけでなく、部分一致大なり小なり、など一定の条件によるQuerySetの取得が可能です

その場合の書き方は、

<QuerySet>.objects.filter(フィールド名__ルックアップ=”値”)

となり、フィールド名とルックアップをアンダースコア(「 _ 」)2つで連結します

具体的にどんなルックアップがあるのかをみていきましょう!

代表的なルックアップ(Field Lookups)

ルックアップは、filterメソッド内で、

…filter(フィールド名__ルックアップ=”値”)

として使用します

どのような条件でQuerySetを取り出すか、により適切なものを選ぶ必要があります

代表的なものをご紹介します

icontains

部分一致

qs = NippoModel.objects.filter(tittle__icontains="test")

「qs」には、タイトルに「test」という文字を含む日報が格納されます

istartswith/iendswith

istartswith: 始まりが一致する

iendswith: 終わりが一致する

qs = NippoModel.objects.filter(content__istartswith="はじめまして")

「qs」には、内容(コンテンツ)が「はじめまして」という文字で始まる日報が格納されます

qs = User.objects.filter(email__iendswith="@itc.tokyo")

「qs」には、「@itc.tokyo」で終わるEメールアドレスを持つユーザーが格納されます

「icontains」でなく、「contains」

「istartswith」でなく、「startswith」

「iendswith」でなく、「endswith」

も存在します

頭の「i」外すと、英字での大文字小文字を区別するようになります

目的に合わせて使い分けましょう

in

リストに値が含まれているかどうか

qs = NippoModel.objects.filter(id__in=[1, 3, 5])

プライマリーキー(id)が1,3,5の日報を取り出します

gt / gte / lt / lte

gt: “値”より大きい greater than

gte: “値”より大きい、もしくは等しい greater than or equal to

lt: “値”より小さい less than

lte: “値”より小さい、もしくは等しい less than or equal to

qs = NippoModel.objects.filter(id__gt=3)

プライマリーキー(id)が3より大きい日報を取り出します

英語で考えると覚えやすいです!

greater than は gt

まとめ

フィールドルックアップを使ったfilterメソッドの書き方は、

<QuerySet>.objects.filter(フィールド名__ルックアップ=”値”)

となります

「__」は、アンダースコア「_」が2つなので気をつけて!

QuerySetをどのように取得したいかで正しいフィールドルックアップを選ぶようにしましょう!

「どんなフィールドルックアップがあったっけ?」という方はいつでも当記事まで戻ってきてください!

タイトルとURLをコピーしました