Qオブジェクトの使い方を解説【具体的なコード付き】


検索フォームを作るときに使われることが多い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使える検索条件(主なもの)をまとめました。

実際にコードを書く時の参考にしてみてください。


Qオブジェクトのまとめ



(1) Qオブジェクトはモデルのデータをカプセル化する

(2) filterメソッドと一緒に使われるのが一般的

(3) |を使ってor検索ができる

~Django無料講義~のご案内

Code for Djangoが、4時間超の無料Django講義をはじめました
 
・本を出版したCode for Djangoの
 製作者が作ったサイトです。
 
・Code for Djangoの内容も、
 動画で詳しく解説しています。
 
・動画は順次ふやしていきますので、
 ただで学び続けることが可能です。
 
・Djangoの効率的なスキルアップに、
 是非お役立て下さい。

                                                                 Django講義はこちら
Created with