モデルを作成します.コメントには「title」と「body」の属性を持たせることにします.なお,後のステップでは投稿したユーザの ID も属性に追加します.また,コメントの一覧表示の際には最終更新日時の降順でデータベースから取得できるように Meta
クラスで指定しておきます.この部分が以前の Web 版と異なる箇所ですが,Web 版でもこれを記述しても構いません.
comments\models.py
from django.db import models
# Create your models here.
class Comment(models.Model):
title = models.CharField(max_length=200)
body = models.CharField(max_length=1000)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-updated_at']
モデルを作成したらマイグレーションを実行してデータベースにテーブルを追加します.(1) でマイグレーションファイルの実行状況を確認すると,まだどのマイグレーションファイルも実行されていないことがわかります.(2) で comments アプリケーションのマイグレーションファイル (0001_initial.py) を生成します.これは models.py の内容をもとに自動生成されます.(3) で再び実行状況を確認します.(4) でマイグレーションファイルを実行します.(5) で実行状況を確認した結果,全てのマイグレーションファイルが実行されていることがわかりました.
...\django_comment_api>python manage.py showmigrations ⏎ # (1) admin [ ] 0001_initial [ ] 0002_logentry_remove_auto_add [ ] 0003_logentry_add_action_flag_choices auth [ ] 0001_initial [ ] 0002_alter_permission_name_max_length [ ] 0003_alter_user_email_max_length [ ] 0004_alter_user_username_opts [ ] 0005_alter_user_last_login_null [ ] 0006_require_contenttypes_0002 [ ] 0007_alter_validators_add_error_messages [ ] 0008_alter_user_username_max_length [ ] 0009_alter_user_last_name_max_length [ ] 0010_alter_group_name_max_length [ ] 0011_update_proxy_permissions [ ] 0012_alter_user_first_name_max_length comments (no migrations) contenttypes [ ] 0001_initial [ ] 0002_remove_content_type_name sessions [ ] 0001_initial ...\django_comment_api>python manage.py makemigrations comments ⏎ # (2) Migrations for 'comments': comments\migrations\0001_initial.py - Create model Comment ...\django_comment_api>python manage.py showmigrations ⏎ # (3) admin [ ] 0001_initial [ ] 0002_logentry_remove_auto_add [ ] 0003_logentry_add_action_flag_choices auth [ ] 0001_initial [ ] 0002_alter_permission_name_max_length [ ] 0003_alter_user_email_max_length [ ] 0004_alter_user_username_opts [ ] 0005_alter_user_last_login_null [ ] 0006_require_contenttypes_0002 [ ] 0007_alter_validators_add_error_messages [ ] 0008_alter_user_username_max_length [ ] 0009_alter_user_last_name_max_length [ ] 0010_alter_group_name_max_length [ ] 0011_update_proxy_permissions [ ] 0012_alter_user_first_name_max_length comments [ ] 0001_initial contenttypes [ ] 0001_initial [ ] 0002_remove_content_type_name sessions [ ] 0001_initial ...\django_comment_api>python manage.py migrate ⏎ # (4) Operations to perform: Apply all migrations: admin, auth, comments, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying comments.0001_initial... OK Applying sessions.0001_initial... OK ...\django_comment_api>python manage.py showmigrations ⏎ # (5) admin [X] 0001_initial [X] 0002_logentry_remove_auto_add [X] 0003_logentry_add_action_flag_choices auth [X] 0001_initial [X] 0002_alter_permission_name_max_length [X] 0003_alter_user_email_max_length [X] 0004_alter_user_username_opts [X] 0005_alter_user_last_login_null [X] 0006_require_contenttypes_0002 [X] 0007_alter_validators_add_error_messages [X] 0008_alter_user_username_max_length [X] 0009_alter_user_last_name_max_length [X] 0010_alter_group_name_max_length [X] 0011_update_proxy_permissions [X] 0012_alter_user_first_name_max_length comments [X] 0001_initial contenttypes [X] 0001_initial [X] 0002_remove_content_type_name sessions [X] 0001_initial ...\django_comment_api>
データベースに comments_comment テーブルをはじめ様々なテーブルが生成されたはずなので,SQLite を操作してテーブルの一覧と comments_comment テーブルの定義を確認します.
...\django_comment_api>sqlite3 db.sqlite3 ⏎ SQLite version 3.40.1 2022-12-28 14:03:47 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> .schema comments_comment ⏎ CREATE TABLE IF NOT EXISTS "comments_comment" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(200) NOT NULL, "body" varchar(1000) NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); sqlite> .exit ⏎ ...\django_comment_api>