💨
[Django]filterの絞り込みで使えるオプション[gtとかcontainsとか]
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 | 正規表現で指定できる(大文字小文字を区別しない) |
参考
Discussion