検索フォームを作るときに使われることが多いQオブジェクト。
この具体的な使い方を知りたいけど、よくわからないという方も多いのではないかと思います。
そこで今回は、Qオブジェクトの使い方を分かりやすく解説していきます。
Qオブジェクトはor検索をするときに使われる
Qオブジェクトは、モデルのデータの中からor検索をする時に使われます。
実際のコードをみながら、中身について理解していきましょう。
Qオブジェクトは、データをカプセル化させる
また、Qオブジェクトはデータをカプセル化させるというイメージを持つとわかりやすいかと思います。
具体的な図を使って説明しましょう。
上にあるのがモデルに入っているデータです。
このデータが、Qオブジェクトによってふるいにかけられ、その結果がそれぞれまとめられています。
このまとめられたデータは、カプセルの中に入っているようなイメージなので、カプセル化と呼ばれています。
カプセル化させたデータは重複している可能性も十分にあり得ますよね。
だからこそ、Qオブジェクトはor検索のときに使われるのです。
Qオブジェクトの具体的な使い方
ここから、Qオブジェクトの使い方をみていきましょう。
Qオブジェクトは、filterメソッドとともに使われることが多いです。
補足getメソッドと共に使うこともできますが、getメソッドは一つのオブジェクトを取ることしかできません(fileterのように一連のデータを返すことができませn)ので、実質的にgetメソッドとQオブジェクトを一緒に使う機会はほとんどないかと思います。
初期設定したコードの詳細については初期設定コードという記事を参考にしてください。
コード-BASE/app/models.py
class NewModel(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
コード-BASE/app/urls.py
from django.urls import path
from .views import qobuject
urlpatterns = [
path('fbv', qobject, name='qobject'),
]
コード-BASE/app/views.py
1 from django.http import HttpResponse
2 from db.models import Q
3 def qobject(request):
4 objects = NewModel.objects.filter(Q(title_startswith='1'))
5 print(objects)
6 return HttpResponse('')
コードの解説(1) まず、2行目でQオブジェクトをimportしていることを確認しましょう。
(2) 4行目で実際にQオブジェクトを使っています。具体的には、NewModelの中のデータにおいて、titleが1から始まるデータがqueryset型のデータとしてobjectsに格納されます。
実際にコマンドラインで出力結果をみてみましょう。
なお、事前にtitleが1234というデータを一つ作っていることを前提としています。
コマンドライン<QuerySet [<NewModel: 1234>]>
queryset型のデータを確認することができました。
このように、filterと組み合わせてQオブジェクトを使うことができます。
or検索のやり方
次に、or検索をする方法についてみていきましょう。
or検索をするには、|を使います。
具体的なコードをみてみましょう。
コード-BASE/app/views.py
1 from django.http import HttpResponse
2 from db.models import Q
3 def qobject(request):
4 objects = NewModel.objects.filter(Q(title_startswith='1') | Q(title_endswith='2')
5 print(objects)
6 return HttpResponse('')
4行目に注目してください。
|をつかってQオブジェクトを二つ書きました。このように書くことで、or検索をすることができるようになります。
qオブジェクトで使える検索条件
最後に、Qオブジェクトd使える検索条件(主なもの)をまとめました。
実際にコードを書く時の参考にしてみてください。
言葉 | 条件 |
exact | 完全一致(大文字小文字の区別あり) |
iexact | 完全一致(大文字小文字の区別なし) |
contains, icontains | 部分一致 |
startswith, istartswith | 始めに一致 |
endswith, iendswith | 終わりに一致 |
gt | 超 |
gte | 以上 |
lt | 未満 |
lte | 以下 |
Qオブジェクトのまとめ
(1) Qオブジェクトはモデルのデータをカプセル化する
(2) filterメソッドと一緒に使われるのが一般的
(3) |を使ってor検索ができる
~Django無料講義~のご案内
Code for Djangoが、4時間超の無料Django講義をはじめました
- ・本を出版したCode for Djangoの 製作者が作ったサイトです。
- ・Code for Djangoの内容も、 動画で詳しく解説しています。
- ・動画は順次ふやしていきますので、 ただで学び続けることが可能です。
- ・Djangoの効率的なスキルアップに、 是非お役立て下さい。