コメントの一覧表示をする前に,まずテストデータをデータベースに登録しよう.まず,comments ディレクトリに fixtures という名前のディレクトリを作成し,その中に comments-data.json ファイルを設置する.この中に適当なデータを数件登録すれば良い.今回は10件のデータを登録し,created_at(登録日時)が順番どおりになるようにしている.また,updated_at(更新日時)は9番目以外は created_at と同じで,9番目は10番目のコメントが投稿された後に更新されたことにしている.また,3個目のコメントにはHTMLのタグを入力してる.
comments/fixtures/comments-data.json
[
{
"model": "comments.comment",
"fields": {
"title": "最初のコメント",
"body": "コメントの本文",
"created_at": "2020-09-01T12:00:00.000",
"updated_at": "2020-09-01T12:00:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "2個目のコメント",
"body": "2個目の本文",
"created_at": "2020-09-02T13:00:00.000",
"updated_at": "2020-09-02T13:00:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "<3個目>のコメント",
"body": "<h1>3個目の本文</h1>",
"created_at": "2020-09-02T13:03:00.000",
"updated_at": "2020-09-02T13:03:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "4個目のコメント",
"body": "4個目の本文",
"created_at": "2020-09-02T13:04:00.000",
"updated_at": "2020-09-02T13:04:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "5個目のコメント",
"body": "5個目の本文",
"created_at": "2020-09-02T13:05:00.000",
"updated_at": "2020-09-02T13:05:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "6個目のコメント",
"body": "6個目の本文",
"created_at": "2020-09-02T13:06:00.000",
"updated_at": "2020-09-02T13:06:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "7個目のコメント",
"body": "7個目の本文",
"created_at": "2020-09-02T13:07:00.000",
"updated_at": "2020-09-02T13:07:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "8個目のコメント",
"body": "8個目の本文",
"created_at": "2020-09-02T13:08:00.000",
"updated_at": "2020-09-02T13:08:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "9個目のコメント",
"body": "9個目の本文",
"created_at": "2020-09-02T13:09:00.000",
"updated_at": "2020-09-02T13:20:00.000"
}
},
{
"model": "comments.comment",
"fields": {
"title": "10個目のコメント",
"body": "10個目の本文",
"created_at": "2020-09-02T13:10:00.000",
"updated_at": "2020-09-02T13:10:00.000"
}
}
]
テスト用データ(fixtures)の準備ができたら,実際にデータベースに登録してみよう.
(base) C:\Users\lecture\Documents\django\django_comment>python manage.py loaddata comments\fixtures\comments-data.json ⏎ Installed 10 object(s) from 1 fixture(s) (base) C:\Users\lecture\Documents\django\django_comment>
登録されたことを sqlite3 で確認する.
(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎ SQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints. sqlite> .tables ⏎ auth_group comments_comment auth_group_permissions django_admin_log auth_permission django_content_type auth_user django_migrations auth_user_groups django_session auth_user_user_permissions sqlite> select * from comments_comment; ⏎ 1|最初のコメント|コメントの本文|2020-09-01 12:00:00|2020-09-01 12:00:00 2|2個目のコメント|2個目の本文|2020-09-02 13:00:00|2020-09-02 13:00:00 3|<3個目>のコメント|<h1>3個目の本文</h1>|2020-09-02 13:03:00|2020-09-02 13:03:00 4|4個目のコメント|4個目の本文|2020-09-02 13:04:00|2020-09-02 13:04:00 5|5個目のコメント|5個目の本文|2020-09-02 13:05:00|2020-09-02 13:05:00 6|6個目のコメント|6個目の本文|2020-09-02 13:06:00|2020-09-02 13:06:00 7|7個目のコメント|7個目の本文|2020-09-02 13:07:00|2020-09-02 13:07:00 8|8個目のコメント|8個目の本文|2020-09-02 13:08:00|2020-09-02 13:08:00 9|9個目のコメント|9個目の本文|2020-09-02 13:09:00|2020-09-02 13:20:00 10|10個目のコメント|10個目の本文|2020-09-02 13:10:00|2020-09-02 13:10:00 sqlite> .exit ⏎ (base) C:\Users\lecture\Documents\django\django_comment>
上のとおり実行するとデータベースのテーブルに保存されたデータを一覧で表示することができる.しかし,標準では列名が表示されないことに注意する.列名も合わせて表示したい場合は,.headers ON
を実行するとよい.
(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎ SQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints. sqlite> .tables ⏎ auth_group comments_comment auth_group_permissions django_admin_log auth_permission django_content_type auth_user django_migrations auth_user_groups django_session auth_user_user_permissions sqlite> .headers ON ⏎ sqlite> select * from comments_comment; ⏎ id|title|body|created_at|updated_at 1|最初のコメント|コメントの本文|2020-09-01 12:00:00|2020-09-01 12:00:00 2|2個目のコメント|2個目の本文|2020-09-02 13:00:00|2020-09-02 13:00:00 3|<3個目>のコメント|<h1>3個目の本文</h1>|2020-09-02 13:03:00|2020-09-02 13:03:00 4|4個目のコメント|4個目の本文|2020-09-02 13:04:00|2020-09-02 13:04:00 5|5個目のコメント|5個目の本文|2020-09-02 13:05:00|2020-09-02 13:05:00 6|6個目のコメント|6個目の本文|2020-09-02 13:06:00|2020-09-02 13:06:00 7|7個目のコメント|7個目の本文|2020-09-02 13:07:00|2020-09-02 13:07:00 8|8個目のコメント|8個目の本文|2020-09-02 13:08:00|2020-09-02 13:08:00 9|9個目のコメント|9個目の本文|2020-09-02 13:09:00|2020-09-02 13:20:00 10|10個目のコメント|10個目の本文|2020-09-02 13:10:00|2020-09-02 13:10:00 sqlite> .exit ⏎ (base) C:\Users\lecture\Documents\django\django_comment>
なお,python manage.py loaddata comments/fixtures/comments-data.json
のコマンドを再度実行すると2重にデータが登録されてしまうことになる.以降で作成する投稿や更新機能を試す際には,データベースをロールバックして,マイグレーションによるテーブルの再生成,データの登録を順に行えば良い.
(base) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate comments zero ⏎ Operations to perform: Unapply all migrations: comments Running migrations: Rendering model states... DONE Unapplying comments.0001_initial... OK (base) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate ⏎ Operations to perform: Apply all migrations: admin, auth, comments, contenttypes, sessions Running migrations: Applying comments.0001_initial... OK (base) C:\Users\lecture\Documents\django\django_comment>python manage.py loaddata comments\fixtures\comments-data.json ⏎ Installed 10 object(s) from 1 fixture(s)
なお,Windows であれば上の3つのコマンドを & でつなげれば,一気に3つのコマンドを実行できる.(次のコマンドは横に長いのでスクロールしてください)
(base) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate comments zero & python manage.py migrate & python manage.py loaddata comments\fixtures\comments-data.json ⏎ Operations to perform: Unapply all migrations: comments Running migrations: Rendering model states... DONE Unapplying comments.0001_initial... OK Operations to perform: Apply all migrations: admin, auth, comments, contenttypes, sessions Running migrations: Applying comments.0001_initial... OK Installed 10 object(s) from 1 fixture(s) (base) C:\Users\lecture\Documents\django\django_comment>
また,Mac や Linux ではコマンドをセミコロンで繋げば良い.さらに history
コマンドから過去に入力したコマンドを探し,!番号
で再実行すると簡単である.(残念ながら Windows には history コマンドはありません.)
rinsaka@MacBookPro django_comment % python manage.py migrate comments zero; python manage.py migrate; python manage.py loaddata comments/fixtures/comments-data.json ⏎ Operations to perform: Unapply all migrations: comments Running migrations: Rendering model states... DONE Unapplying comments.0001_initial... OK Operations to perform: Apply all migrations: admin, auth, comments, contenttypes, sessions Running migrations: Applying comments.0001_initial... OK Installed 10 object(s) from 1 fixture(s) rinsaka@MacBookPro django_comment % rinsaka@MacBookPro django_comment % history 1 | grep loaddata ⏎ 637 python manage.py loaddata comments/fixtures/comments-data.json 653 python manage.py migrate comments zero; python manage.py migrate; python manage.py loaddata comments/fixtures/comments-data.json rinsaka@MacBookPro django_comment % !653 ⏎ python manage.py migrate comments zero; python manage.py migrate; python manage.py loaddata comments/fixtures/comments-data.json Operations to perform: Unapply all migrations: comments Running migrations: Rendering model states... DONE Unapplying comments.0001_initial... OK Operations to perform: Apply all migrations: admin, auth, comments, contenttypes, sessions Running migrations: Applying comments.0001_initial... OK Installed 10 object(s) from 1 fixture(s) rinsaka@MacBookPro django_comment %