サイトアイコン ITC Media

【Django】models.py・モデルクラスの書き方を徹底解説

(最終更新月:2022年9月)

✔このような方へ向けて書かれた記事となります

「Djangoのmodels.pyって何?役割は?」

「Django モデルの書き方が知りたい!」

「どうやってモデルをデータベースへ反映させるの?」

✔当記事を通じてお伝えすること

当記事では、当ブログを通じて作成している「日報アプリ」を例としながら、モデルについての基本をお伝えしていきます。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Djangoにおけるmodels.py モデルの役割とは?

Webアプリ開発において、Djangoを使うメリットの一つは、データベースとの連携にあります。

Djangoを使えば、SQL言語がわからなくても、Python言語でデータベースの書き込みや編集ができてしまうのです。

このデータベースとやり取りをするのが、models.pyであり、そこに書かれたモデルクラスになります。

例として、当ブログで作成しているモデル「NippoModel」は以下のとおり。

from django.db import models

class NippoModel(models.Model):
    title = models.CharField(max_length=100)
    content = models.CharField(max_length=1000)
    timestamp = models.DateTimeField(auto_now_add=True)

「NippoModel」は以下のように表に置き換えるとわかりやすいです。

次章で書き方をご説明していきます。

モデルクラスの書き方を一から解説

モデルクラスの書き方では以下のポイントをおさえましょう。

必要パッケージのインポート

モデルクラスで必要なライブラリはひとつだけ。

modelsをインポートします。

from django.db import models

継承クラスの作成

Modelクラスを継承したクラスを作成します。

class クラス名(models.Model):
    pass

今のところは以下のとおり。

from django.db import models

class NippoModel(models.Model):
    pass

次に「pass」とした部分にフィールドを作っていきます

フィールドの作成

モデルクラス内のフィールドは、データベースのカラムに相当します。

プライマリーキーの役割を担う「id」フィールドは自動的に作られていますので、id以外を作りましょう。

フィールド名 = models.フィールド種類(引数**)

from django.db import models

class NippoModel(models.Model):
    title = models.CharField(max_length=100)
    content = models.CharField(max_length=1000)
    timestamp = models.DateTimeField(auto_now_add=True)

モデルで使用できるフィールドは他にもたくさんあります。下記に全てまとめましたのでご参考にして下さい。

モデルの作成は完了です。

次章で実際にデータベースへ反映させていきます。

作成したモデルをデータベースへ反映させる方法

データベースへ反映させるには2ステップです。

  1. PythonコードをSQLへ変換する
  2. データベースへ実際に書き込みをする

PythonコードをSQLへ変換する

ターミナルを開き、「manage.py」ファイルのあるフォルダへ移動し下記を実行します。

python manage.py makemigrations

下記の通り表示されれば、成功です。

Migrations for 'nippo':
  nippo/migrations/0001_initial.py
    - Create model NippoModel

作成したクラスがmigrationsファイルへ変換されました。

参考までにmigrationsファイルを見てみましょう。

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='NippoModel',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=100)),
                ('content', models.CharField(max_length=1000)),
                ('timestamp', models.DateTimeField(auto_now_add=True)),
            ],
        ),
    ]

nippo > migrations > 0001_initial.py

モデルクラスに記述した3つのフィールドと、プライマリーキー「id」フィールドが反映されているのがわかります。

いよいよデータベースへ書き込みをしていきましょう。

データベースへ実際に書き込みをする

「manage.py」があるフォルダ上のターミナルで以下を実行します。

python manage.py migrate

下記のような出力であれば、成功です。

Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying ...
  Applying ...
  ..
  Applying nippo.0001_initial... OK
  ..

作成したモデルをデータベースへ反映させることができました。

シェルを使ってモデルクラスで遊ぶ

シェルを使って以下の基本事項をお伝えしていきます。

以下のコマンドでシェルを開いてモデルクラスで遊んでみましょう。

python manage.py shell

モデルクラスへのアクセス

モデルクラスへのアクセス方法は以下のとおり。

from アプリ名.models import モデルクラス名

「NippoModel」を例とするとこのようになります。

from nippo.models import NippoModel

モデルクラスにデータを書き込む

実際にデータを書き込んでみましょう。

>>> obj = NippoModel(title="テストタイトル", content="テストコンテント")

「timestamp」フィールドは自動で値が保存されるので不要。

フィールドにアクセスしてみると以下のようになります。

>>> obj.title
'テストタイトル'
>>> obj.content
'テストコンテント'

最後にデータベースに書き込み(保存)しましょう。

>>> obj.save()

保存されるとこんなイメージです。

モデルクラスに保存したデータを見てみる

保存したデータを見てみます。

>>> q = NippoModel.objects.first()
>>> q.title
'テストタイトル'

objects.firstメソッドは一番最初に保存したデータを取り出します

詳しくは以下の記事で解説していますのでこちらでは割愛します。

まとめ

当記事の内容をまとめます。

複雑なモデルクラスでも基本の構成は同じです。

ただし、モデルフィールドはさまざまな種類があります。

以下の記事を読んで、モデル設計の幅を広げましょう。

次のステップはシェルではなく、ブラウザからデータを保存・編集するための管理画面について解説します。

管理画面へのアクセス方法・データを保存・編集するための設定方法を見ていきましょう。

モバイルバージョンを終了