(最終更新月:2022年9月)
✔このような方へ向けて書かれた記事となります
「Djangoのmodels.pyって何?役割は?」
「Django モデルの書き方が知りたい!」
「どうやってモデルをデータベースへ反映させるの?」
✔当記事を通じてお伝えすること
- Djangoにおけるmodels.py モデルの役割とは?
- models.py モデルの書き方を一から解説
- 作成したモデルをデータベースへ反映させる方法
当記事では、当ブログを通じて作成している「日報アプリ」を例としながら、モデルについての基本をお伝えしていきます。
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ステップです。
- PythonコードをSQLへ変換する
- データベースへ実際に書き込みをする
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クラスを継承して作成する
- モデルクラスのフィールドは、表でいう列に相当する
- モデルクラスができたら、書き込みをして完了となる
複雑なモデルクラスでも基本の構成は同じです。
ただし、モデルフィールドはさまざまな種類があります。
以下の記事を読んで、モデル設計の幅を広げましょう。
次のステップはシェルではなく、ブラウザからデータを保存・編集するための管理画面について解説します。
管理画面へのアクセス方法・データを保存・編集するための設定方法を見ていきましょう。