検索方法
基本的には、モデル名.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以下」は次のようになる。
filter(column__gte=num1, column__lte=num2)
条件が増えてきたときは次のような記述もできる。
objects.filter(条件1) \
.filter(条件2)\
.filter(条件3)\
.filter(条件4)
条件のどれかを満たす
2つの条件のどちらかを満たしているものを見つけたいときは
Q関数の引数に条件を指定して|でつなげてfilterの引数にする。
('論理和', 'OR検索', 'または'と言われるものになる)
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に変換するなどして使う。
find = request.POST['find']
list = find.split()
data = Friend.objects.filter(name__in=list)
これは半角スペース区切りで入力された名前全てで検索する例
参考
Python Django3超入門