【django】 objects.all() の使い方とサンプル

スポンサーリンク
Django

クエリメソッドの中でもよく使用する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サイトを組み合わせる方法も教えています。

タイトルとURLをコピーしました