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

Django

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

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

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

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

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

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

  • Djangoにおけるmodels.py モデルの役割とは?
  • models.py モデルの書き方を一から解説
  • 作成したモデルをデータベースへ反映させる方法

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

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

安い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メソッドは一番最初に保存したデータを取り出します

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

まとめ

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

  • models.pyは、データベースとの連携を司るファイル
  • モデルクラスは、Modelクラスを継承して作成する
  • モデルクラスのフィールドは、表でいう列に相当する
  • モデルクラスができたら、書き込みをして完了となる

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

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

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

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

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

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

タイトルとURLをコピーしました