クエリメソッドの中でもよく使用するobjects.all()メソッド
「クエリセットのデータ全てをコピーして出力します。」
と説明しても分かりにくいため、その使い方とサンプルをこの記事に記載します。
もし、objects.all()メゾットに関して、より知りたい場合は見ていただけると嬉しいです。
objects.all() 説明の前に
先の説明で、all()メソッドは「クエリセットの全てをコピーして出力する」と書きました。
そのため、objects.all()を説明する前に”クエリセット“に関して説明を。
クエリセットはモデルのデータベースから取り出したデータのことを指します。
このクエリセットとして出力されたすべてのデータを変数に置き変えることができる。
それがall()メソッドの役割です。
all()メソッドの使用方法
たとえば、モデルのデータベースには以下のようなデータが入っているとします。
Sampleという変数の中に辞書型がリストの構成要素2つとして入っています。
Sample = [
{'id': 1, 'title': 'title1', 'text': 'text1'},
{'id': 2, 'title': 'title2', 'text': 'text2'}
]
辞書型にはキーとして「id」「title」「text」があり、値として「1/2」「title1/title2」「text1/text2」がそれぞれ入っています。
このデータをviews.pyの中にall()で書いて使用します。
書き方は”モデルクラス名.objects.all()“です。
この場合は上記の通り、Sampleというモデルクラス名になっています。
from django.shortcuts import render
from .models import Sample
def lists(request):
sample_list = Sample.objects.all()
return render(request, 'lists.html', {'sample_list':sample_list})
Sample.objects.all()だけでデータベースの中身全てが”sample_list”として引き渡されました。
これを最後の行のrenderでテンプレートに値を引き渡します。
テンプレートで表示
all()メソッドがよく使われるのは一覧表を出す場合です。
そのため、djangoのテンプレートタグであるfor文を使って一覧として出力させます。
<body>
<div>
<h1>List Page</h1>
</div>
{% for sample in sample_list %}
<div>
<p>{{ sample }}:{{ sample.title }}:{{ sample.text}}</p>
</div>
{% endfor %}
</body>
all()メソッドで引き渡した変数sample_listからfor文を回して一つずつ出力させます。
実際の画面ではこのようになります。

{{ sample }}だけだとSample objects(1)となり、
{{ sample.title }}のようにドットでつなげれば、その要素、ここではtitleとtextが出てきています。
このような出力結果を<li>で箇条書きにしたり、<table>で表として表示したりできます。楽ですね。
追記 all()では中身がわからない!場合
all()メソッドを使用して表示させる場合、中身がわからない時に、一部 or Sample.objects(1)のような表示になって、「あれ?どんな要素があったっけ?」ってなります。
そんなときには “values()” を使用すると便利です。
例えば、views.pyで以下のようになる方法もあります。
def lists(request):
sample_list = Sample.objects.all().values() #ここ
print(sample_list)
return render(request, 'lists.html', {'sample_list':sample_list})
#print文の出力結果は以下(改行して分かりやすくしてます。)
>> <QuerySet [{'id': 1, 'title': 'title1', 'text': 'text1'},
>> {'id': 2, 'title': 'title2', 'text': 'text2'}]>
他にも、values()を使ってテンプレートの方で各要素の詳細を表示させることもできます。
{% for sample in sample_list %}
<div>
<p>{{ sample }}</p> #ここがコツ
</div>
{% endfor %}
各要素を表示する部分に{{ sample }}を加えるだけで、上記のテンプレートでは以下のような画面になります。

objects.all().values()には要素を並べて一つのまとまりにすることができるんですね。
もし、「あれ?何が入ってたっけ?」となった時は使ってみてください。
以上です。
より勉強するのに必要なdjangoのおすすめ本を以下の記事で紹介しています。
また、スキルアップのために、djangoをスクールで効率よく学びたい人向けに以下の記事がおすすめです。
最近のプログラミングスクールでもdjangoは学べます。
しかも、AIとWebサイトを組み合わせる方法も教えています。