💨

[Django]filterの絞り込みで使えるオプション[gtとかcontainsとか]

2021/05/03に公開

filter, getで使えるField lookups

Djangoのモデルを使ってDB検索をする時に、以下のように書けます。

Entry.objects.get(id__exact=14)

アンダースコアを2つつなげれば検索の幅が広がるわけですが、それを使いこなすにはある程度できることは覚えていたほうが良いでしょう。

ということで簡単にまとめます

一覧

exact 指定した文字列と完全一致する場合 PythonのNoneはSQLのNULLとして変換される
iexact 指定した文字列と完全一致する場合(大文字小文字を区別しない) PythonのNoneはSQLのNULLとして変換される
contains 指定した文字列を含んでいる場合
icontains 指定した文字列を含んでいる場合(大文字小文字を区別しない)
in リスト、タプル文字列で指定した値のいずれかに当てはまる場合
gt 指定した値より大きい場合
Greater than.
gte 指定した値より大きい、もしくは同値の場合
Greater than or equal to.
lt 指定した値より小さい場合
Less than.
lte 指定した値より小さい、もしくは同値の場合
Less than or equal to.
startswith 指定した文字列で始まる場合
istartwith 指定した文字列で始まる場合(大文字小文字を区別しない)
endswith 指定した文字列で終わる場合
iendswith 指定した文字列で終わる場合(大文字小文字を区別しない)
range タプルで指定した範囲内の場合
date 指定した特定の日付に当てはまる場合 USE_TZ
year 指定した年の場合 gteなどとも組み合わせられる
iso_year yearのISO8601に一致するバージョン?
month 指定した月の場合 gteなどとも組み合わせられる
day 指定した日の場合 gteなどとも組み合わせられる
week その年の第何週かを指定して、それに当てはまる場合 (第一週のカウントなどはISO8601を確認すればわかる?)
week_day 指定した曜日の場合。数値で指定する 指定する数値は1:日, 2:月, 3:火, 4:水, 5:木, 6:金, 7:土に対応する
iso_week_day week_dayのISO8601に一致するバージョン?
quarter (年を4つに分け、)指定した期間に当てはまる場合 指定する数値は1(1~3月), 2(4~6月), 3(7~9月), 4(10~12月)
time 指定した時間に当てはまる場合
hour 指定した時(hour)の場合 0~23を取る
minute 指定した分(minute)の場合 0~59を取る
second 指定した秒(second)の場合 0~59を取る
isnull nullである場合 NULLである行を取り出す場合はTrue, その逆はFalseを指定する
regex 正規表現で指定できる
iregex 正規表現で指定できる(大文字小文字を区別しない)

参考

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

Discussion