[申請承認アプリ]データリストの表示

前回まででフォームを作成してデータの登録はできました。ただ、このままではちゃんと登録されているのか見えない状態なので、登録したセミナーデータをトップページに表示していきます。

まずはこれまでTemplateViewを使用していましたが、ListViewに変更します。

from django.shortcuts import render
from django.views.generic import ListView, CreateView  #ListViewに変更
from .form import SeminarForm
from .models import Seminar  #追加

#変更
class index(ListView):
	model=Seminar
	template_name = "application/index.html"

class program_add(CreateView):
	form_class = SeminarForm
	template_name="application/program_add.html"
	success_url="/"

変えたところはListViewとSeminarモデルをインポートして、indexクラスの継承元をListViewに変更し、modelとしてSeminarを指定しただけです。簡単ですね。

ListViewではmodelを指定すると、全データを含んだobject_listをテンプレートに渡してくれます。次にテンプレート側でそれを表示できるようにしましょう。

index.htmlを下記の通り変更してください。

{% extends 'base/base.html' %}
{%block content%}
      <h1>セミナー申込み</h1>
      <a href={%url 'application:program_add' %} class='btn btn-primary m-1'>追加</a>
      {% for seminar in object_list %}
      <table class='table table-bordered'>
      <tr><td class='col-3'>セミナー名</td><td class='col-9'>{{ seminar.name }}</td></tr>
      <tr><td>開催形式</td><td>{{ seminar.get_type_display }}</td></tr>
      <tr><td>開催日</td><td>{{ seminar.start_date }}{%if seminar.end_date %}~{{ seminar.end_date }}{%endif%}</td></tr>
      <tr><td>概要</td><td>{{ seminar.overview|linebreaksbr }}</td></tr>
      </table>
      {% endfor %}
{%endblock%}

ここで下記のリンクは追加フォームへのリンクです。urlというテンプレートタグを使用してurls.pyでapp_nameやnameで指定した名前空間を使ってリンクを張ることができます。ここでは、applicationの中のprogram_addにリンクしていることになります。階層がさらに深ければ、さらにコロンで区切ることで指定できます。

      <a href={%url 'application:program_add' %} class='btn btn-primary m-1'>追加</a>

実際のデータの表示はforというテンプレートタグの部分からになります。これは見たらわかると思いますが、object_listからデータを一つずつseminar変数として取り出して、ループさせています。

少し特殊なのは形式のところでseminar.get_type_displayというものが出てきます。typeはchoiceを設定して選択式にしたフィールドです。seminar.typeとした場合、データベースに保存されている”f2f”や”el”が表示されますが、choiceで設定した人間が分かる表示に変換するためにはget_○○_displayとします。

もう一つはseminar.overview|linebreaksbrの部分です。djangoでは様々な組み込みテンプレートフィルターが用意されていますが、linebreaksbrは改行コードを<br>に変えて表示してくれます。textareaのフィールドを表示する場合に必須のフィルターですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です