クエリーセットのfilterメソッド
よく忘れてGoogle先生に尋ねる羽目になるのでメモ書き。
Djangoのデータベースラッパであるfilterを使う時、SQLで言う「where a like ...」や「where a > 0」とかを、filterではどう書くのか忘れます。例えば完全一致だと、SQLの場合は「where a == ...」ですがfilterの場合は「filter(a__exact=...)」ないしは「filter(a=...)」となります。
ちなみに、DBソフトによっては、大文字小文字区別が無かったりします。
挙動 | SQL上での演算子 | Django Filter | 例 |
完全一致 | = | a*1 | a = ... |
完全一致 | = | exact | a__exact=... |
大文字小文字区別無しの一致 | iLIKE '...' | iexact | a__iexact=... |
大文字小文字区別有りの部分一致 | like '%...%' | contains | a__contains=... |
大文字小文字区別無しの部分一致 | ilike '%...%' | icontains | a__icontains=... |
大文字小文字区別有りの前方一致 | like '...%' | startswith | a__startswith=... |
大文字小文字区別無しの前方一致 | ilike '...%' | istartswith | a__istartswith=... |
大文字小文字区別有りの後方一致 | like '%...' | endswith | a__endswith=... |
大文字小文字区別無しの後方一致 | ilike '%...' | iendswith | a__iendswith=... |
...より大きい | > | gt | a__gt=... |
...以上 | >= | gte | a__gte=... |
...より小さい | < | lt | a__lt=... |
...以下 | <= | lte | a__lte=... |
リストに含まれている物を抽出 | in (...) | in | a__in=... |
日付や日時に対する範囲指定 | between | range | a__range=(start_date, end_date) |
年の厳密一致 | between 'xxxx-01-01 00:00:00' and 'xxxx-12-31 23:59:59' | year | a_year=xxxx |
月の厳密一致 | (exact ('month' from ...) = ...) | month | a__month = ... |
日の厳密一致 | (exact ('day' from ...) = ...) | day | a__day = ... |
NULL を取り出す | is null | isnull | a__isnull=True |
NULLでないのを取り出す | is not null | isnull | a__isnull=False |
全文検索 | わがんね*2 | search | a__search=... |