プロジェクトの作成とListViewの作成
まずは、プロジェクトとアプリを作った上で、ListViewを作っていきましょう。
[コマンドライン]
$ mkdir todo
$ cd todo
$ django-admin startproject todoproject .
$ python manage.py startapp todo
[コード]
-BASE/todoproject/settings.py
INSTALLED_APPS = [
...
'todo', ← new!
]
TEMPLATES = [
...
'DIRS': [BASE_DIR, 'templates'] ← new!
]
[コード]
-BASE/todo/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('todo.urls')),
]
次に、models.pyの設定を進めていきましょう。
[コード]
-BASE/todo/models.py
from django.db import models
class TodoModel(models.Model):
title = models.CharField(max_length=100)
content = models.TextField
pic = models.ForeignKey(
'auth.User',
on_delete=models.CASCADE
)
今回はTodoModelというクラス名にし、title、content、picという3つのフィールドを作りました。
新しく出てきたのが、models.Foreginkeyです。これは、違うモデルのフィールドを使いたいときに用いるものです。
models.Foreignkeyの下の行にauth.Userと書かれています。このauth.Userとは、djangoがデフォルトで備えているauthモデルのUserテーブルのことです。
つまり、このtodoモデルは、Userのデータと関連付けてデータを管理するようにしています。
最後の行のon_deleteは、データを削除したときにどういった動きをするのかという点について決めるものです。
models.CASCADEの場合、関連付けられている2つのテーブル(UserテーブルとTodoModelテーブル)の情報がまとめて削除されます。
例えば、Userテーブルのaさんが、5つのTodoを作っていたとします。
そして、Userテーブルのaさんの情報が削除されると、aさんが書いていた5つのTodoの情報も一緒に削除されるということです。
Todoを削除することでuserの情報が消えるのではなく、Userのデータを消すことで、Todoの情報も合わせて消されるという点を頭に入れておきましょう。