Django Modelsの基礎:データベース構造を簡単に理解するための完全ガイド
こんにちは、皆さん!今日はDjango modelsの基礎的な内容について説明します。 最初 ジャンゴを見た時、modelsという概念が少し難しくて難しく感じませんでしたか? 私もそうでした。でも、心配しないでください!この記事を読めば、Django modelsの基礎とデータベースの構造を完璧に理解することができます。
Django modelsは、複雑なSQLクエリを必要とせず、Pythonコードだけでデータベースを扱うことができる魔法のようなツールです。 この記事では、Django modelsの基本的な概念から実際のコード例まで、Django modelsについて知っておくべきことをすべて説明します。 さあ、始めましょう。
Django Modelsとは何ですか?
Django modelsはデータベース構造を Pythonクラス各モデルはデータベースのテーブルに対応し、モデルの属性はテーブルのフィールドになります。Djangoはこのモデルによってデータベース操作を抽象化し、開発者がより簡単にデータを扱えるようにします。
データベースの構造(テーブルとフィールド)
データベーステーブルはエクセルファイルの 1枚と似ています。エクセルシートには複数の行(row)と列(column)がありますよね? テーブルも同様にデータが行(レコード)と列(フィールド)で構成されています。
- 行(Row):一つのデータを表します。例)顧客テーブルで1行は1つの顧客の情報
- 列(Column):データの属性を表します。例)顧客の名前、メールアドレス、電話番号
フィールドは、テーブル内にデータを格納する 各列つまり、一つのフィールドは特定のデータの プロパティイナ 特徴を保存します。例えば、顧客テーブルを作る場合、ID、名前、メールアドレス、電話番号などのフィールドが必要でしょう。
Django Modelsの基礎:最初のモデルの作成

さあ、実際にDjango modelsを作ってみましょう。下記のコードを見てください。 このコードは'Book'というモデルを生成して書籍情報(チェックタイトル、著者、出版日、書籍価格)を保存して管理するための構造を作ります。
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
publication_date = models.DateField()
price = models.DecimalField(max_digits=6, decimal_places=2)
def __str__(self):
return self.titleコード解説
from django.db import models: Djangoのモデル機能を使うためimportします。クラス Book(models.Model): 'Book'という名前のモデルクラスを定義します。モデル.Modelを 継承受け取ります。title = models.CharField(max_length=200): 本のタイトルを保存する文字列フィールドを定義します。最大200文字まで保存可能です。author = models.CharField(max_length=100):著者名を保存するフィールドです。最大100文字まで可能です。publication_date = models.DateField(): 公開日を保存する日付フィールドです。price = models.DecimalField(max_digits=6, decimal_places=2):価格を保存する小数点フィールドです。最大6桁、小数点以下2桁まで保存可能です。def __str__(self):: このメソッドはモデルのインスタンスを文字列で表現する時使います。ここでは本のタイトルを返すようにしました。
これで、基本的なDjango modelsが完成します!複雑に見えますが、一つ一つを分解してみるとそんなに難しくないですよね? 理解できないときはどうする? とりあえず、こういうものがあるんだなと思いながら進んでいくと、自然とわかるのがこの底です。
Django Modelsとデータベース構造を理解する
Django modelsを使うとデータベース構造を簡単に定義することができます。 上のBookモデルは実際にデータベースに次のようなテーブルを生成します。
CREATE TABLE "books_book"(
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT、
"title" varchar(200) NOT NULL、
"author" varchar(100) NOT NULL、
"publication_date" date NOT NULL、
"price" 10進数(6, 2) NOT NULL
)です;コード解説
SQLコードは先ほど見たDjangoモデルをデータベーステーブルに変換したものです。 このコードは'books_book'というテーブルを生成するSQLコマンドです。
- テーブル名: "books_book"
- Djangoは基本的にアプリ名とモデル名を組み合わせてテーブル名を作ります。ここでは'books'アプリの'Book'モデルを意味します。
- フィールド定義
- "id":整数型(integer)フィールドで、主キー(PRIMARY KEY)であり、自動増加(AUTOINCREMENT)属性を持ちます。
- "title":最大200文字の可変長文字列(varchar)フィールドです。
- "author":最大100文字の可変長文字列フィールドです。
- "publication_date":日付(date)タイプのフィールドです。
- "price":小数点以下2桁を含む最大6桁の10進数(decimal)フィールドです。
- 制約条件:
- すべてのフィールドにNOT NULL制約があり、NULL値を許可しません。
ご覧の通り、Django modelsはPythonコードをSQLに自動変換してくれます。 これがDjango ORM(Object-Relational Mapping)の魔法です!
Django Modelsの基礎: 関係を設定する

データベースで最も重要な概念の一つが「関係」です。 Django modelsでもこのような関係を簡単に表現することができます。
class Publisher(models.Model):
name = models.CharField(max_length=200)
address = models.CharField(max_length=200)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey('Author', on_delete=models.CASCADE)
publisher = models.ForeignKey(Publisher, on_delete=models.SET_NULL, null=True)
genres = models.ManyToManyField('Genre')コード解説
author = models.ForeignKey('Author', on_delete=models.CASCADE)これは1対多(1:N)の関係を表しています。 一人の著者が複数の本を書くことができます。on_delete=models.CASCADEは、著者が削除されると、その著者のすべての本も削除されるということです。publisher = models.ForeignKey(Publisher, on_delete=models.SET_NULL, null=True)これも1対多の関係ですね。 1つの出版社が複数の本を出版することができます。on_delete=models.SET_NULLは出版社が削除されると、その本の出版社フィールドをNULLに設定する(True)という意味です。genres = models.ManyToManyField('Genre')これは多対多(N:N)の関係を表しています。 1冊の本が複数のジャンルに属することもあれば、1つのジャンルに複数の本が属することもあります。
このようにDjango modelsを使うと、複雑なデータベース関係も簡単に表現できます。
Django Modelsの基礎:データベースの移行

モデルを作ったからといって、すぐにデータベースに反映されるわけではありません。 Djangoでは「マイグレーション」というプロセスでモデルの変更をデータベースに適用します。
python manage.py makemigrations
python manage.py migrateこの2つのコマンドだけであなたのモデルが実際のデータベーステーブルになります。本当に便利ですよね?
仕上げ
さて、ここまでDjango modelsの基礎とデータベースの構造を理解することについて説明しました。 どうでしたか? 最初は少し複雑に見えるかもしれませんが、一つ一つ理解していくと、本当にパワフルで便利なツールだと感じることでしょう。 Django modelsをうまく活用すれば、複雑なデータベースの作業も本当に簡単にできるようになりますよ。
皆さんも、Django modelsの基礎を学んだので、自分でモデルを作ってみてはいかがでしょうか? 実際にコードを書いて実行してみることで、より深く理解することができると思います。 みんな、がんばりましょう
初心者向け用語解説
- ORM: Object-Relational Mappingの略で、オブジェクトとリレーショナルデータベースをつなぐ技術です。
- マイグレーション:モデルの変更をデータベーススキーマに反映するDjangoの方法です。
- フィールド:モデルの属性を表し、データベースのカラムに相当します。
- 外部キー(Foreign Key):他のテーブルの基本キーを参照するフィールドです。 1対多の関係を表現するときに使います。
- 多対多の関係(Many-to-Many):両モデルが互いに複数の関係を持つことができる場合を指します。






