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

Django

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

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

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

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

当記事を通じて、

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

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

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

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

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をどのように取得したいかで正しいフィールドルックアップを選ぶようにしましょう!

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

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました