見出し画像

【Django公式サイト チュートリアル(2)】データベース設定

こんにちは(@t_kun_kamakiri

前回の続きをします。

今回は、Django内でデータベースの設定を行います。
こちらのチュートリアルにしたがって勉強ログを残しておきます。

Database の設定¶

データベースの設定は、


1.「mysite/polls/models.py」でデータベースのクラスを作成
2.「mysite/settings」ファイル内でどのアプリのモデルを読み込ませるかを設定

1.「mysite/polls/models.py」でデータベースのクラスを作成

まず、「mysite/polls/models.py」を以下のようにします。

from django.db import models

# Create your models here.
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)

●class Question(models.Model):は何をしているのか?
django.dbのライブラリのmodels.pyのファイル内のModelというクラスを継承しているという意味です。

CharField、DateTimeField、IntegerFieldでフィールドの型をしていしています。
※注意点としては、CharField には必ずmax_lengthの引数を設定する必要があるという点です。

フィールドの型については以下の記事がよくまとまっているので参照させていただきます。

2.「mysite/settings」ファイル内でどのアプリのモデルを読み込ませるかを設定

先ほど作成したモデルを有効にするためには、どのアプリのデータベースを作成するのかを「mysite/settings」に指定する必要があります。

その設定は、「mysite/settings」のINSTALLED_APPS 内に記述します。

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

「 'polls.apps.PollsConfig',」を追加しました。
これは、「polls/apps.py」のファイル内のクラス「PollsConfig」を読み込んでいる設定となります。
では、polls/apps.pyがどうなっているのかというと、

from django.apps import AppConfig


class PollsConfig(AppConfig):
   name = 'polls'

「name = 'polls'」となっています。
この関係性を絵にすると以下のようになります。

画像1

結局どのアプリを指定しますか?という設定なので、'こんな回りくどいことをせずに、直接以下のように書いても良いです。

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

でも、今回はチュートリアルに従って書いていくことにします。

そして次のコマンドを実行します。

python3 manage.py makemigrations polls

画像2

エラーがなければ以下のようにモデルデータベース用のファイルが作成されます。

画像3

ここで例えば新たにデータの変数名を変えたとします。

question_text1 = models.CharField(max_length=200)

画像5

もう一回、以下のコマンドを実行します。

python3 manage.py makemigrations polls

すると、「Did you rename question.question_text to question.question_text1 (a CharField)? [y/N] y」と名前の変更をしますか?と聞かれるので「y」を押して進めます。

画像5

すると以下のように変更箇所が記されたファイルが新たに作成されます。

画像6

次に、以下のコマンドを実行してデータベースに反映させます。

python3 manage.py migrate

問題がなければ以下のようになります。

画像7

「Apply all migrations: admin, auth, contenttypes, polls, sessions」となっているので設定したアプリ内のデータベースがされています。

流れを今一度おさらいしておきます。

●モデルを変更する (models.py の中の)
●これらの変更のためのマイグレーションを作成するために python3 manage.py makemigrations を実行します。
●データベースにこれらの変更を適用するために python3 manage.py migrate を実行します。

管理画面でデータベースを確認してみる

先ほど作成したデータベースを管理画面で確認してみます。

やることの手順は以下です。

1.管理ユーザーを作成
2.開発用サーバーからログイン

では、やっていきましょう。

1.管理ユーザーを作成

まずは、管理ユーザーを以下のコマンドで作成します。

python3 manage.py createsuperuser

username
Email adress(何も設定しなくても良い)
Password
を適当に設定します。

画像8

これで管理ユーザーを作成できました。

では、開発用サーバーを立ち上げて管理画面を確認してみます。

python3 manage.py runserver

サーバーを立ち上げたら「http://127.0.0.1:8000/admin」もアクセスします。

画像9

画像10

ログインすると以上のような画面になるのですが、先ほど作成したデータベースがまだありません。

管理画面でデータベースの表示を行うには、「polls/admin.py」の中を以下のようして、adminにもモデルの存在を知らせる必要があります。

from django.contrib import admin
from .models import Question, Choice
# Register your models here.


admin.site.register(Question)
admin.site.register(Choice)

「register」とあるので、「Question」と「Choice」をadminに登録するといった意味合いになります。

これで再度アクセスすると以下のようにでデータベースが反映されています。

画像11

「+Add」を押して自由にデータを自由に追加することができます。

画像12

このように管理画面からデータベースの操作ができます。

本日は以上です。


Twitter➡@t_kun_kamakiri
ブログ➡宇宙に入ったカマキリ(物理ブログ)
ココナラ➡物理の質問サポートサービス


この記事が気に入ったらサポートをしてみませんか?