しゃちの備忘録

プログラミングを中心とした技術関連の備忘録です(今のところ)

Djangoに触る(その3)

3日目です.

昨日混乱したテーブルの追加とmigrateについて調べたことと,チュートリアルの続きに挑みます

前回まで

teru0rc4.hatenablog.com

データベースのテーブル作成に挑みました. がテーブルの作成で混乱したので,そこで詰まってました….

今日やったところ

はじめての Django アプリ作成、その2 | Django documentation | Django

宣言通り,テーブルの作成について調べてまとめました. まとめた知識について触れながら,この章を終えました.

テーブルの作成について

前回migrateコマンドで混乱したのでそこについて調べました.

モデルを作成しテーブルを作るのですが, データベースサーバーにテーブルを作成する場合,マイグレーションファイルと呼ばれるものを作成する必要があります. これを作成するためのコマンドが,makemigrationsコマンドになります.

今回は前につくったpollsの中にテーブルを作成します. その為にまず,プロジェクトにpollsの存在を教えてやる為に, mystie/setting.pyの中のINSTALLED_APPSpolls.apps.PollsConfigを追加してあげます.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls.apps.PollsConfig'
]

makemigrations

INSTALLED_APPSへの追記が完了したらmakemigrationsを実行します. これをすることで,settings.py内に記入したアプリケーションを精査し,マイグレーションファイルを作成してくれます. マイグレーションファイルはpythonの形式で保存されます.

その前に今回はpolls/modelsの中に,以下のモデルを作成します. これの説明は省略しますが,これを作ることで質問事項や情報の公開日などの情報や, 質問のテキスト,投票数などを情報を記述してます.

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

モデルを記述したら,いよいよミグレーションファイルを作成します.

$ python3 manage.py makemigrations polls

するとこのような画面になると思います. polls/migrationsファイル内に0001_initial/pyが生成されたと思います.

f:id:teru0rc4:20170902003110p:plain

ひとまずこれでマイグレーションファイルの生成は完了です.

sqlmigrate

マイグレーションファイルを対象にとって, そのマイグレーションファイルがどのようなSQLを実行するかを確認するコマンドに,sqlmigrateというコマンドが存在します. 今回は以下のコマンドを入力します. ここでの pollsはアプリケーション名を指し,0001は先ほど作成したマイグレーションファイル名を指しています

$ python3 manage.py sqlmigrate polls 0001

こんな感じの内容が出ればひとまずOKです. f:id:teru0rc4:20170902004324p:plain

migrate

では最後に先ほど作ったマイグレーションファイルを,サーバーに適応します.

$ python3 manage.py migrate

するとこんな感じになります. これで適用は完了です.

f:id:teru0rc4:20170902004858p:plain

シェルでの操作

python manage.py shellとすることで,先ほどデータベースの中などを色々見ることができます. ここでの記述は省略.

管理ユーザadminの作成

データベースをあれこれする上で大切なのが,管理者の存在です.(adminとかsuperuserとか言ったりすると思います)

まずはadminサイトに接続できるユーザーを作成します.

$ python3 manage.py createsuperuser

するとUsernameEmail ddressPasswardを要求されるので設定してあげてください.

下はパスワード設定を適当にやりすぎて,3回も失敗している図です. f:id:teru0rc4:20170902011007p:plain

adminサイトに入る

ではサーバを起動してadminページに入りたいと思います.

python3 manage.py runserverを実行し,http://127.0.0.1:8000/admin/にアクセスしましょう.

f:id:teru0rc4:20170902011259p:plain

ここに先ほどのUsernamePasswardを入力すると….

f:id:teru0rc4:20170902011355p:plain

このようにadmin用の管理サイトに入れました.

pollsアプリを追加する

実はこのadminページ上ではpollsを編集することはできません. なのでpolls/admin.pyを以下のように編集ましょう.

from django.contrib import admin

from .models import Question

admin.site.register(Question)

変更の上で,リロードするとこのようにpollsアプリの中からQuestionが追加されました.

f:id:teru0rc4:20170902011821p:plain

今日はここまでお疲れ様でした.

おわりに

テーブルの作成について色々調べました. 結局人に聞いてしまったりしたので,なるだけ自分だけで完結できるといいですね…と少し反省.

三日坊主の壁を超えたので,そこはほっとしてますが, 進捗スピードは速くないのでスピードアップできるといいかなーとも思いました.

うーん.頑張ります.