filter( 式1, 式2 )ANDとは、「2つの条件の両方に合致するものを検索する」というやり方です。AとBの条件があったら、「AもBも両方に合致する」というものだけを取り出します。これは日本語で「論理積」と呼ばれます。
filter( Q(式1) | Q(式2) )もう1つのつなぎ方は、「2つの条件のどちらか片方に合致すれば取り出すというやり方です。これは、「論理和」と呼ばれます。
filter(Q(name__contains=name_str)|Q(mail__contains=name_str))「どちらか一方でも値が含まれていれば」ということですから、これはOR検索の処理だとわかりますね。このfilterメソッドの部分をよく見ると、こんな具合に書かれていることがわかります。
filter( Q(……略……) | Q(……略……) )Qを使って条件を用意し、それを | 記号でつないでいます。Q関数が追加されるのでANDよりは若干わかりにくい感じになっていますが、書き方さえわかれば割と簡単に作ることができるでしょう。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
from django.db.models import Q #追記する def index(request): if request.method == 'POST': name_str = request.POST['name'] data = Person.objects.all().filter(Q(name__contains=name_str)|Q(mail__contains=name_str)) else: data = Person.objects.all() name_str = '' context = { 'current_name': name_str, 'msg': 'Personのリスト', 'data': data, } return render(request, 'hello/index.html', context)
<< 前へ | 次へ >> |