【django】models.pyでデータベースの初期設定を行う方法

djangoのプロジェクトを作成すると,自動的にデータベースが作成され,デフォルトでSQLiteが使用されます

他にもPostgreSQL,MariaDB,MySQL,Oracleを使うことが可能です

しかし,データベースをどのように設定すればいいのか?どう扱うのか?といった疑問は多いです

本記事ではdjangoのデータベースの初期設定をSQLiteで行い,データベースを設定方法や編集方法について解説します

本記事を読むことで,djangoでの基本的なデータベースの扱い方が理解できます

目次

django用の初期データベーステーブルを作成する

まずSQLiteデータベース内にテーブルを作成します

コマンドプロンプト(ターミナル)から以下のコマンドを実行しましょう

python manage.py migrate

この際settings.pyのINSTALLED_APPSに含まれているアプリケーションごとにテーブルが作成されます

djangoのデータベースに新しいテーブルを追加する

SQLiteにdjangoの初期データベーステーブルを作成した後は,自身で定義したテーブルを作成します

djangoに新しいデータベーステーブルを追加したい場合は,models.pyを編集します

その次に,モデルを有効化します

models.pyに新しいテーブルを定義する

models.pyに自身が追加したいテーブルを定義します

今回はブログっぽい感じで作成します

from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField(blank=True)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'blogs'

ブログのタイトル,内容,作成日,更新日が含まれるテーブルにしました

ブログのタイトル
title = models.CharField(max_length=200)

CharFieldは文字列を扱うためのFieldです(最大文字数200)

ブログの内容
content = models.TextField(blank=True)

TextFieldは文字列を扱うためのFieldで,文字数に制限がありません

ブログの作成日,更新日
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)

DateTimeFieldは日付用のFieldで,auto_nowにすることで自動で追加されます

def __str__(self):
Blogというモデルを呼び出したときに表示させる文字列です
デバックの際にどう表示されるかと考えるとわかりやすいです


db_table
テーブル名をblogsと指定しています
デフォルトはアプリケーション名+テーブル名なので,blog_blogとなります

アプリケーションを有効化する

djangoではプロジェクトに自身のアプリケーションを追加してあげないといけません

以下のファイルを確認しましょう

INSTALLED_APPS = [
    'blog.apps.BlogConfig', # 確認してください
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

追加されていなかった場合はこちらにアプリケーションを追加しましょう

models.pyの変更を反映する

models.pyで変更した箇所を反映するために,以下のコマンドを打ちましょう

python manage.py makemigrations blog

コマンドを実行すると以下のようになったと思います

Migrations for 'blog':
  blog\migrations\0001_initial.py
    - Create model Blog

さらにblog/migrations/0001_initial.pyが作成されたと思います

これでmodels.pyに変更した箇所が反映されました

テーブルを作成する

ではテーブル作成をしましょう

python manage.py migrate

以下のような結果が出たと思います

Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
  Applying blog.0001_initial... OK

つまり,0001_initialの変更が適用されました

djangoの管理画面を使ってデータベースを編集する

djangoの管理ユーザーページは非常に便利で,簡単にモデルの編集を行うことができます

このためにdjangoを使うという方もいます

管理ユーザーを作成する

作成手順は簡単です.以下のコマンドを打ち込んでください

python manage.py createsuperuser

上記のコマンドを打つと以下のように順番に入力を求められます

Username: admin
Email address: admin@example.com
Password: ********
Password (again): ********
Superuser created successfully.

これで管理ユーザーの完成です.

管理画面へのログイン

管理ユーザーを作成したのでログインしてみましょう

djangoの開発サーバーを立ち上げます

python manage.py runserver

下記のadminページにアクセスします.

http://127.0.0.1:8000/admin/

admin_login

このようなページが表示されるのでログインしてみてください

ログインが完了したら以下のようになります

admin_page_init

admin上でデータベーステーブルを編集できるようにする

今の状態ではadminでGroupsとUsersしかないと思います

ここに自身で作ったモデルを表示させて編集できるようにします

from django.contrib import admin

from .models import Blog

admin.site.register(Blog)

これだけです.ブラウザを再読み込みしてみましょう.

admin_page_blog

自身で作成したモデルが表示されていれば完了です

あとは好きに編集できますので,お楽しみください

参考文献

下記にModelsの公式ドキュメントと関連記事をまとめているので,参考にしてください

Modelsの公式ドキュメント

モデルでCharFieldとTextFieldで文字列を扱う

モデルにURL専用のフィールドを追加する

choiceで選択肢から選ぶ

お疲れ様でした

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次