一覧表示画面を作ろう¶
Djangoモデル を作ろう¶
Django Modelを使ってみよう を参考に、Modelクラスを定義しましょう。
今回定義するModelクラスは、データベースでは以下のテーブル構造になります。
論理名 | 物理名 | データ型 | 長さ | 必須 | キー | 外部キー | デフォルト値 | 備考 |
---|---|---|---|---|---|---|---|---|
ID | id | INT | YES | PK | AUTO INCREMENT | |||
メッセージ | message | varchar | 255 | YES | ||||
登録日 | created_at | datetime | YES | 登録した日時 | ||||
更新日 | updated_at | datetime | YES | 登録した日時 | 更新日時を保持する |
Modelクラスを定義しよう¶
crud/models.py
from django.db import models
class Message(models.Model):
message = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return u"{0}:{1}... ".format(self.id, self.message[:10])
DateTimeFieldに設定しているパラメーターの詳細は以下の表の通りです。
auto_now: | オブジェクトを保存する度に、その時の時刻を自動的に設定します。タイムスタンプの実現に便利です。 |
---|---|
auto_now_add: | オブジェクトを生成した時の時刻を自動的に設定します。登録日タイムスタンプの実現に便利です。 |
これらのパラメーターを使った場合、任意の値で更新できなくなるので注意してください。
migrateを行おう¶
定義したMessageモデルをデータベースに反映させましょう。
(venv)$ python mysite/manage.py makemigrations
(venv)$ python mysite/manage.py migrate
makemigrationsが成功した時には次のメッセージが表示されます。
Migrations for 'crud':
0001_initial.py:
- Create model Message
migrateを行います。
(venv)$ python mysite/manage.py migrate
migrateが成功した時には次のメッセージが表示されます。
Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: auth, hello, admin, sessions, crud, contenttypes
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying crud.0001_initial... OK
Django shellから表示確認用のデータを作ろう¶
一覧画面を作る時に、表示するデータが無いと問題の有無がわかりません。表示確認用にデータを1件追加しておきます。
以下のコマンドを実行し、インタラクティブシェル(Django shell)を起動します。
(venv)$ python mysite/manage.py shell
>>>
インタラクティブシェルから、データを追加するコマンドを実行します。
>>> from crud.models import Message
>>> Message.objects.create(message=u'Test Message.')
ビュー関数 を編集しよう¶
画面表示で使うデータを取得しよう¶
画面には、Messageモデルに登録されているデータをすべて表示します。
crud/views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Message # 追加する
一覧表示処理( index() )を追加します。
def index(request):
d = {
'messages': Message.objects.all(),
}
return render(request, 'crud/index.html', d)
テンプレートファイル を編集しよう¶
Messageモデルに登録されているデータを表示しよう¶
templates/crud/index.html
{% extends "base.html" %}
{% block body %}
<form method="post" action="">
<table border="1">
<thead>
<tr>
<th>message</th>
<th>created_at</th>
<th>updated_at</th>
</tr>
</thead>
<tbody>
{% for message in messages %}
<tr>
<td>{{ message.message }}</td>
<td>{{ message.created_at }}</td>
<td>{{ message.updated_at }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</form>
{% endblock %}
http://127.0.0.1:8000/crud/ を表示して、表示確認用に登録したデータが表示されていれば成功です。
