🐣

【Django】QuerySetのfilter()を使いこなす!

2022/11/19に公開約2,000字

この記事では、Djangoがデフォルトで備えている「新しいQuerySetsを返すメソッド」のうち、「filter()」について解説します。

公式ドキュメントを覗く 🫣

https://docs.djangoproject.com/en/4.0/ref/models/querysets/

公式ドキュメントにはこのように書かれています。

filter(*args, **kwargs)

与えられた検索パラメータに一致するオブジェクトを含む新しいクエリセットを返します。ルックアップパラメータ(**kwargs)は、ここ(本記事の内容)で説明されている形式でなければなりません。
複数のパラメータは、SQL文のなかでANDで結合されます。

結論 ⚖️

filter()を使うことで、検索条件を自由に指定することができます。

実践 💪

完全一致検索

Sample.objects.filter(field='条件')
# または
Sample.objects.filter(field__exact='条件')

LIKE句検索

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

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=2022)
Sample.objects.filter(field__month=12)
Sample.objects.filter(field__day=31)

IS NULL

Sample.objects.filter(field__isnull=True)

IS NOT NULL

Sample.objects.filter(field__isnull=False)

全文検索

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

Discussion

ログインするとコメントできます