【Django】データベースからデータを取得してブラウザに表示する「objects.all」と「objects.get」

データをリストで表示Django

(最終更新月:2021年11月)

「HTMLページの表示方法は理解した!」

「HTMLファイルとPythonファイルの連携はなんとなくわかってきた!」

という初学者の方へ向けて、次のステップに進むための記事をご用意しました

当記事を通じて、データベースからデータを取得ブラウザで表示する方法をお伝えします

  1. モデルクラス名.objects.all()
  2. モデルクラス名.objects.get()

という2つのメソッドについての解説となります

Djangoで言われるCRUDのうちのR(Reac→参照)についての記事となります

  • objects.allで取得した複数の値は「リストビュー」として
  • objects.getで取得した単一の値は「ディテールビュー」として

ブラウザに表示するまで解説していきます

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安のWebデザインスクールです。

>>デザナルに興味がある方はこちらからどうぞ<<

詳細をまとめた記事もございますので、ぜひご覧ください。

さいしょに

データベースにデータを複数追加しましょう(目安は4つ!)

Django create 4 objects for nippo

複数用意できましたら先へ進みます

データを全て取得する「objects.all」

views.py内の関数で記述していきます

【nippoListView】

from django.shortcuts import render
from .models import NippoModel

def nippoListView(request):
    template_name = "nippo/nippo-list.html"
    ctx = {}
    qs = NippoModel.objects.all()
    ctx["object_list"] = qs

    return render(request, template_name, ctx)

qs = NippoModel.objects.all()

でNippoModelクラスに保存されているデータを全て取得しています

モデルクラスのインポートも忘れずに!

取得したデータをコンテキストでHTMLテンプレートへ渡し、forループを使って表示していきます

【nippo-list.html】

{% extends "base.html" %}

{% block title %}日報アプリ一覧{% endblock %}

{% block content %}
<div>
    <ul>
      {% for obj in object_list %}
        <li>{{ obj.title }}</li>
      {% endfor %}
    </ul>
  </div>
{% endblock %}

forループは

{% for 要素 in リスト %} {% endfor %}

の中で記述していきます

【一覧ページ】ブラウザでアクセス

http://localhost8000/nippo/

※urls.pyなどの設定方法は説明を割愛しています

特定のデータを取得する「objects.get」

objects.all()は保存されているすべてのデータを取り出します

対して、objects.get()は単一のデータを取り出すメソッドになります

【nippoDetailView】

 def nippoDetailView(request, pk):
     template_name = "nippo/nippo-detail.html"
     ctx = {}
     q = NippoModel.objects.get(pk=pk)
     ctx["object"] = q
     return render(request, template_name, ctx)

q = NippoModel.objects.get(pk=pk)

objects.get(pk=数値)

とすることでpkが数値と一致しているデータを取り出してくれます

上記のコード例では、URLから受け取ったint型「pk」と一致するpkを持つデータを取り出しています

下記のようにHTMLでは記述しています

{% extends "base.html" %}

{% block title %}pkでオブジェクトを表示します{% endblock %}

{% block content %}
<div>
    {{ object }}
</div>
{% endblock %}

【詳細ページ】ブラウザでアクセス

http://localhost:8000/nippo/detail/1/1

urls.pyのurlpatternsでは、「pk」を受け取れるよう「<int:pk>」の記述が必要です

まとめ

以上で、データベースからデータを取得→HTMLで表示する方法を解説させていただきました

  • すべてのデータを取り出すには、モデルクラス名.objects.all()
  • 特定のデータを取り出すには、モデルクラス名.objects.get(フィールド名=値)

となります

また、複数のデータを取り出した場合はforループで展開していくことも頭に入れておきましょう

次回は、CRUDの「C」、データを登録・保存する方法について解説していきます

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました