Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Django】Todoアプリを開発 #2 ~データベースの作成、編集~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210924094721p:plain

おはようございます。Shotaです。

今回の記事もDjangoでTodoアプリを開発するための方法について解説していきます。



「データベース」とは?

データベースとは、簡単に言えば決まった形式で整理されたデータの集まりです。大量にあるデータを検索しやすくしたもので、コンピュータ上で整理されている情報群です。

例えば、商品情報を「商品名」や「値段」、「在庫数」の項目ごとに整理したり、複数の商品情報を「商品コード」別に分類したりしたものがデータベースになります。


Djangoにおけるデータベース

f:id:ShotaNukumizu_1000:20210924060613p:plain

Djangoでは、アプリプロジェクトのmodels.pyにデータベースに格納するデータを記述してデータベースと連携する設計を行います。

models.pyでは、データベースのテーブル名やカラム名、カラムのプロパティ値などの情報を設定します。複数のtableに共通するカラムがある場合、中小ベースクラスという仕組みを利用することで、モデル内の個々のクラスに重複するテーブルを設定する手間を省けます。要は、Djangomodels.pyはデータベースの設計図のような役割を果たしているのです。


todo/models.pyの設定

それでは、実際にmodelを書いていきましょう。設定するデータベースの内容は以下の通りです。

  • title:設定するタスクの名前

  • memo:設定したタスクの詳細


とりあえずtodo/models.pyに以下のコードを記述してください。

todo/models.py

from django.db import models

class TodoModel(models.Model):
    title = models.CharField(max_length=50)
    memo = models.TextField()

これを入力し終えたら、以下のコマンドを入力してください。

py manage.py makemigrations

入力後、以下のコマンドが表示されていたらデータベースが完成していることになります。

Migrations for 'todo':
  todo\migrations\0001_initial.py
    - Create model TodoModel

出来上がったファイルであるtodo/migrations/0001_initial.pyファイルを見ていきましょう。

# Generated by Django 3.2.4 on 2021-10-28 23:15

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='TodoModel',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=50)),
                ('memo', models.TextField()),
            ],
        ),
    ]

上記のファイルは、上述のコマンドpy manage.py makemigrationsを実行してデータベースを作成した時に表示されるコマンドです。上記のファイルで、一つ定義されていないidという変数があります。これは、各データベースに割り振られる番号のようなものです。

あとは以下のコマンドを入力してtodo/models.pyとデータベースを連携してください。

py manage.py migrate

これでデータベースと連携できるようになりました。


データベースを操作する


管理画面にログイン

それでは、実際に以下のコマンドを入力してlocalhost:8000/adminにアクセスして管理画面を開いてください。

py manage.py runserver

そうすると、以下のような画面が表示されていると思います。

f:id:ShotaNukumizu_1000:20211029082907p:plain

これはDjangoの管理サイトのログイン画面です。ユーザ名とパスワードを入力してログインするのですが、まだそれらを定義していないのでログインできません。そこで、Djangoではcreatesuperuserコマンドでユーザ名とパスワードを設定していきます。

まずは以下のコマンドを入力してください。

py manage.py createsuperuser

そして、以下のようなコマンドが表示されてユーザ名とパスワードを要求されます。それぞれ入力すれば、superuserを作れます。ちなみに、superuserは管理者のことを指します。superuserはデータベースの管理やユーザの管理ができます。

これと似たようなコマンドにpy manage.py createuserがあります。これは管理者ではないユーザを作成する時に使います。やり方は基本的にsuperuserのときとまったく同じです。

再度サーバを立ち上げて、以下の管理画面にアクセスしてください。

f:id:ShotaNukumizu_1000:20211029082907p:plain

そしてユーザ名とパスワードを入力すると、以下のような画面が表示されていると思います。

f:id:ShotaNukumizu_1000:20211029083906p:plain

このような画面が表示されれば成功です。


管理画面とデータベースを連携させる

しかし、上記の画面には先ほど作成したデータベースが表示されていません。データベースを管理画面に反映させるためには、todo/admin.pyのプログラムを変更する必要があります。

todo/admin.py

from django.contrib import admin
from .models import TodoModel

admin.site.register(TodoModel)

これで再度サーバを立ち上げると、以下の画面のようにデータベースが反映されているのが分かります。

f:id:ShotaNukumizu_1000:20211029084630p:plain


新しいデータベースを作る

上記の管理画面に入れば、「Add」をクリックすると以下のような画面が表示されます。

f:id:ShotaNukumizu_1000:20211029084814p:plain

そして、それぞれtitlememoにタスクの詳細を入力すれば新しくデータベースを作ることができます。

f:id:ShotaNukumizu_1000:20211029085316p:plain

ここで、models.pyに戻って以下のようにコードを書くと記事のタイトルを表示できます。

todo/models.py

from django.db import models

class TodoModel(models.Model):
    title = models.CharField(max_length=50)
    memo = models.TextField()

    def __str__(self):
        return self.title

▼変更箇所

def __str__(self):
    return self.title

これをモデルのクラス内に書くことで、タイトルを表示できるのです。(Todomodelからタスクの名前に切り替わっているのが分かります。)

f:id:ShotaNukumizu_1000:20211029085603p:plain


まとめ

今回の記事では、Djangoでデータベースの作成や編集をする方法について詳細に解説しました。

今回の記事はこれで終了です。

【参考記事】

qiita.com

qiita.com

it-trend.jp