検索方法
基本的には、モデル名.objects.filter()
を使う。
filter()
の引数を変えることで様々な検索ができる
基本の検索
検索対象のカラム名をcolumn
とする
以下、検索のキーワードをword
引数 | 意味 |
---|---|
column=word | 一致するもの |
column__iexact=word | 大文字小文字区別なしの一致するもの |
column__contaiins=word | あいまい検索 |
column__startwith=word | wordで始まるもの |
column__endwith=word | wordで終わるもの |
column__icontaiins=word | 大文字小文字区別なしのあいまい検索 |
column__istartwith=word | 大文字小文字区別なしのwordで始まるもの |
column__iendwith=word | 大文字小文字区別なしのwordで終わるもの |
以下、検索の値をnum
引数 | 意味 |
---|---|
column=num | 一致 |
column__gt=num | numより大きい |
column__gte=num | numと等しいか大きい |
column__lt=num | numより小さい |
column__lte=num | numと等しいか小さい |
複数条件の検索
条件全てを満たす
いくつかの条件を全て満たすものを検索する場合、単純に引数を複数記述すれば良い
('論理積', 'AND検索', 'かつ'と言われるものになる)
「num1以上num2以下」は次のようになる。
sample.py
filter(column__gte=num1, column__lte=num2)
条件が増えてきたときは次のような記述もできる。
sample.py
objects.filter(条件1) \
.filter(条件2)\
.filter(条件3)\
.filter(条件4)
条件のどれかを満たす
2つの条件のどちらかを満たしているものを見つけたいときは
Q関数の引数に条件を指定して|
でつなげてfilter
の引数にする。
('論理和', 'OR検索', 'または'と言われるものになる)
sample.py
from django.db.models import Q
objects.filter( Q(条件1) | Q(条件2) )
検索wordがいくつかある場合はQ関数をつなげるよりも、リストによる検索が便利。
word1
or word2
or word3
といった検索の時は、
objects.filter(column__in = [word1, word2, word3])
のようにする。
実際には、以下のようにフォームに入力されたものをlistに変換するなどして使う。
sample.py
find = request.POST['find']
list = find.split()
data = Friend.objects.filter(name__in=list)
これは半角スペース区切りで入力された名前全てで検索する例
参考
Python Django3超入門