Django Logo

[Django]QuerySetのfilterメソッドの使い方まとめ

Django のクエリセットの filter メソッドを使うとき、毎回 Google で使い方調べてたんですが、毎回調べるのも大変なので filter メソッドの使い方をまとめました。

filter メソッドとは

SQL でいうところの WHERE 句の部分の条件式のことになります。 Django では SQL 文を直接記述することはなく、ラッパーである filter メソッドなどを利用して SQL 文と同等の処理を記述していきます。

完全一致検索

Sample.objects.filter(field='条件')

もしくは、

Sample.objects.filter(field__exact='条件')

LIKE 句検索

LIKE 検索における大文字小文字の区別はデータベースの設定に依存するため、大文字小文字区別有りの filter メソッドを利用しても、区別がされない場合があります。

完全一致(大文字小文字区別無し)

Sample.objects.filter(field__iexact='条件')

部分一致(大文字小文字区別有り)

Sample.objects.filter(field__contains='条件')

部分一致(大文字小文字区別無し)

Sample.objects.filter(field__icontains='条件')

前方一致(大文字小文字区別有り)

Sample.objects.filter(field__startswith='条件')

前方一致(大文字小文字区別無し)

Sample.objects.filter(field__istartswith='条件')

後方一致(大文字小文字区別有り)

Sample.objects.filter(field__endswith='条件')

後方一致(大文字小文字区別無し)

Sample.objects.filter(field__iendswith='条件')

大小比較

より大きい(greater than)

Sample.objects.filter(field__gt='条件')

以上(greater than equal)

Sample.objects.filter(field__gte='条件')

より小さい(less than)

Sample.objects.filter(field__lt='条件')

小さい(less than equal)

Sample.objects.filter(field__lte='条件')

IN 句検索

Sample.objects.filter(field__in=['条件1', '条件2'])

BETWEEN句検索

Sample.objects.filter(field__range=(start, end))

日付の厳密一致

Sample.objects.filter(field__year='2022')

Sample.objects.filter(field__month='01')

Sample.objects.filter(field__day='01')

IS NULL

Sample.objects.filter(field__isnull=True)

IS NOT NULL

Sample.objects.filter(field__isnull=False)

全文検索

Sample.objects.filter(field__search='条件')

最後に

filter メソッド自体はよく使うんですが、細かい条件指定までは覚えてないことが多かったので整理してみました。 MVC モデルなどで O/R マッパーを使って開発していると、どうしても素の SQL を意識せずに開発を進めがちですが、きちんと SQL の組み立ても意識しながら filter メソッドなどのラッパーを有効活用していきたいと思います。

「[Django]QuerySetのfilterメソッドの使い方まとめ」への5件のフィードバック

  1. こんにちは。
    私もDjangoの開発時にfilter条件をよくググるのでまとめて頂き感謝しています。

    1点、BETWEEN句の記述に漏れがあるようでしたのでご報告です。

    誤:Sample.objects.filter(field__range(start, end))
    正:Sample.objects.filter(field__range=(start, end))

    タイポだと思いますが念のため。
    宜しくお願いします。

  2. ピンバック: 【Python】Djangoを学ぶ時におすすめだったサイトや教材まとめ!(随時更新) - クラインの備忘壺

  3. ピンバック: Djangoでくじ引きアプリを作ってみる_part13 | 30代未経験ネットワークエンジニアのblog

  4. ピンバック: Django学習日記(2021/12/11-2021/12/17) | 1年でDjangoエンジニア転職

Djangoでくじ引きアプリを作ってみる_part13 | 30代未経験ネットワークエンジニアのblog へ返信する 返信をキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です