Edited at

Djangoチュートリアル アプリ作成(2)[モデル・DBの作成]


アプリの作成

manage.pyファイルがあるディレクトリで、

$ python3 manage.py startapp blog

bin db.sqlite3 lib mysite
blog include manage.py pyvenv.cfg

これで新しくblogディレクトリが作成されました。

アプリケーションを作成したら、Djangoにそれを使うように伝えないといけません。

mysite/settings.pyファイルの中で指定します。まずINSTALLED_APPSをみつけて、その上に'blog'という一行を追加します。

mysite/settings.pyをエディタで開き、'blog',を追加します。


INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]

blog/models.pyファイルでModelsと呼ばれる全てのオブジェクトを定義します。これがブログポストを定義する場所です。

blog/models.pyをエディタで開いて全部削除し、下記のコードを書きます。


from django.db import models
from django.utils import timezone

class Post(models.Model):
author = models.ForeignKey('auth.User',on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)

def publish(self):
self.published_date = timezone.now()
self.save()

def __str__(self):
return self.title

models.ModelはポストがDjango Modelという意味で、Djangoが、これはデータベースに保存すべきものだと分かるようにしています。

フィールドのタイプを決めなければいけません。

・models.CharField - テキスト数を定義するフィールド

・models.TextField - これは制限無しの長いテキスト

・models.DateTimeField - 日付と時間のフィールド

・models.ForeignKey - これは他のモデルへのリンク


データベースにモデル用のテーブルを作る

新しいモデルをデータベースに追加します。まず、今作成したモデルの中で少し変更があったことをDjangoに知らせます。

$ python3 manage.py makemigrations blog

Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Post

$ python3 manage.py migrate blog
Operations to perform:
Apply all migrations: blog
Running migrations:
Applying blog.0001_initial... OK

これでポストモデルがデータベースに入りました。


ポストを追加・編集・削除

blog/admin.pyファイルをエディタで開き、以下のように変更します。


from django.contrib import admin
from .models import Post

admin.site.register(Post)

前回定義したPostモデルをimportしています。モデルをadminページで見れるようにするには、モデルをadmin.site.register(Post)で登録する必要があります。

次に、ポストモデルを見ます。Webサーバーを走らせるには、以下のコードを実行します。

$ python3 manage.py runserver

http://127.0.0.1:8000/admin/

このような画面が出てくると思います。

スクリーンショット 2018-09-03 23.44.56.jpg

ログインするには、superuser (サイトの全てを管理するユーザー)を作る必要があります。

一旦、ターミナルでcommand+Nで別のタブを作り、myvenvに移動し、

$ python3 manage.py createsuperuser

を入力し、続けて、ユーザー名、メールアドレス、パスワードを入力してください。

あとでログインするときに使うので、わかりやすいものにしてください。

全て入力したら、Superuser created successfully.と出てきます。

そしたら、ブラウザに戻って、先ほど作成したsuperuserでログインします。

スクリーンショット 2018-09-03 23.53.42.jpg

このような画面になります。

そしたら試しにPostsにいき適当に書いて保存して見ましょう。

保存できたら成功です!!!