モデルとマイグレーション
データベースを定義してマイグレーションします
「モデルとマイグレーション」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
Djangoのモデル
Djangoのモデルは、データベーステーブルの構造を定義するPythonクラスです。各属性がフィールドになります。モデルはアプリのmodels.pyに記述します。
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
print('Post model defined')フィールドの種類
Djangoには、データベースのカラム型に対応する多くのフィールド型が用意されています。
- 短いテキストには
CharFieldを使用します(max_lengthが必要です) - 長いテキストには
TextFieldを使用します IntegerField、BooleanField、DateTimeFieldもあります
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
views = models.IntegerField(default=0)
print('Fields map to columns')暗黙的な主キー
Djangoはすべてのモデルに、自動的に増分するid主キーを追加します。そのため、通常は自分で主キーを宣言する必要はありません。
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
# 'id' is added automatically
print('id field is automatic')フィールドのオプション
フィールドには、動作やバリデーションを制御するdefault、null、blank、uniqueなどのオプションを指定できます。
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
published = models.BooleanField(default=False)
subtitle = models.CharField(max_length=200, blank=True)
print('Options refine each field')日付と時刻
DateTimeField(auto_now_add=True)は、行が最初に作成された日時を記録します。auto_now=Trueを指定すると、保存するたびに更新されます。
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
print('Timestamps set automatically')リレーションシップ
1対多の関係にはForeignKeyを使ってモデル同士を関連付けます。参照先の行が削除されたときの動作は、on_deleteで指定します。
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Post(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
print('ForeignKey links Post to Author')マイグレーションとは
マイグレーションは、モデルの変更をデータベースのスキーマ変更に変換するDjangoの仕組みです。データベース用のバージョン管理ともいえます。
# Migrations record schema changes over time
# so the database matches your models
print('Migrations track schema changes')makemigrations
python manage.py makemigrationsはモデルを調べ、変更内容を記述したマイグレーションファイルを生成します。
# python manage.py makemigrations
# -> blog/migrations/0001_initial.py
print('makemigrations writes migration files')migrate
python manage.py migrateは、保留中のマイグレーションをデータベースに適用し、テーブルを作成または変更します。
# python manage.py migrate
# -> Applying blog.0001_initial... OK
print('migrate applies changes to the DB')マイグレーションの流れ
基本的な流れは、models.pyを編集し、makemigrationsを実行してから、migrateを実行するというものです。モデルを変更するたびに繰り返します。
# 1. Change models.py
# 2. python manage.py makemigrations
# 3. python manage.py migrate
print('Edit, make, migrate')モデルのクエリ
各モデルには、クエリに使うobjectsというマネージャーが用意されます。Post.objects.all()、.filter()、.get()、.create()などを使えます。
# Post.objects.all()
# Post.objects.filter(published=True)
# Post.objects.get(id=1)
# Post.objects.create(title='Hello')
print('objects is the query manager')理解度チェック
マイグレーションについての理解度を確認しましょう。
まとめ
モデルを定義し、マイグレーションを適用する方法を学びました。
- モデルは、型付きフィールドを持つ
models.py内のクラスです - Djangoは自動的に
id主キーを追加します ForeignKeyでモデルを関連付け、on_deleteで連鎖削除などの動作を指定しますmakemigrationsの後にmigrateを実行して、データベースを同期しますModel.objectsでデータを検索します
よくある質問
「モデルとマイグレーション」レッスンは無料ですか?
はい。「モデルとマイグレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「モデルとマイグレーション」で何を学びますか?
データベースを定義してマイグレーションします ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「モデルとマイグレーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プロジェクトとアプリ
- モデルとマイグレーション
- ビューとURL
- Django Admin