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

2018年4月19日

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メソッドなどのラッパーを有効活用していきたいと思います。