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

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

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

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

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

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

当記事を通じて、

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

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

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

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

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

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

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

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

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

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

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をコピーしました