LoginSignup
4
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-03

アプリの作成

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にいき適当に書いて保存して見ましょう。
保存できたら成功です!!!

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4