[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=【リスト】)

BETWEEN句検索

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

日付の厳密一致

Sample.objects.filter(field__year=年)

Sample.objects.filter(field__month=月)

Sample.objects.filter(field__day=日)

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エンジニア転職

コメントする

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