【タレントダッシュボード構築 #2】djangoのモデル定義を理解する①
#1に続き、今回はdjangoのモデル定義についてまとめます。
djangoでは、SQLを書いてDBを定義するのではなく、「マイグレーション」操作によってDBを定義します。マイグレーション元として定義するのがmodels.pyです。
社員の基礎情報を集めるテーブルを定義する具体例に基づいて考えていきます。キーは社員コード、属性としていくつかの情報を持たせます。
[models.py]
class Item(models.Model):
"""
クラス(社員基礎情報)
"""
code_7 = models.CharField(verbose_name='社員コード',max_length=7,primary_key=True,)
name = models.CharField(verbose_name='氏名',max_length=30,)
name_kana = models.CharField(verbose_name='カナ氏名',max_length=30,)
honbu = models.CharField(verbose_name='本部',max_length=30,)
dept = models.CharField(verbose_name='部室',max_length=30,)
yaku = models.CharField(verbose_name='役職',max_length=30,blank=True,null=True,)
ent_date = models.DateField(verbose_name='入社日',)
birth_date = models.DateField(verbose_name='生年月日',)
soshiki = models.CharField(verbose_name='組織コード',max_length=9,)
mail = models.CharField(verbose_name='メールアドレス',max_length=50,blank=True,null=True,)
choketsu = models.CharField(verbose_name='長欠',max_length=1,blank=True,null=True,)
kyushoku = models.CharField(verbose_name='休職',max_length=1,blank=True,null=True,)
def __str__(self): # 管理画面などで表示するカラム
return self.code_7
class Meta: # 管理画面上のタイトル
verbose_name = '社員基礎情報'
verbose_name_plural = '社員基礎情報'
7桁の社員コードをキーとしています。
この項目で一意になるようモデリングしていくので、今回は引数primary_keyをTrueと定義しました。
models.pyを保存したら、manage.pyが置かれているディレクトリに遷移し、以下のコマンドでマイグレーションファイルを生成します。
$ python manage.py makemigrations
migrationsディレクトリ配下にファイルができていますね。
[0001_initial.py]
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Item2',
fields=[
('code_7', models.CharField(max_length=7, primary_key=True, serialize=False, verbose_name='社員コード')),
('name', models.CharField(max_length=30, verbose_name='氏名')),
('name_kana', models.CharField(max_length=30, verbose_name='カナ氏名')),
('honbu', models.CharField(max_length=30, verbose_name='本部')),
('dept', models.CharField(max_length=30, verbose_name='部室')),
('yaku', models.CharField(blank=True, max_length=30, null=True, verbose_name='役職')),
('ent_date', models.DateField(verbose_name='入社日')),
('birth_date', models.DateField(verbose_name='生年月日')),
('soshiki', models.CharField(max_length=9, verbose_name='組織コード')),
('mail', models.CharField(blank=True, max_length=50, null=True, verbose_name='メールアドレス')),
('choketsu', models.CharField(blank=True, max_length=1, null=True, verbose_name='長欠')),
('kyushoku', models.CharField(blank=True, max_length=1, null=True, verbose_name='休職')),
],
options={
'verbose_name': '社員基礎情報',
'verbose_name_plural': '社員基礎情報',
},
),
]
こうすればマイグレーション完了です。
$ python manage.py migrate
Operations to perform:
Apply all migrations: app
Running migrations:
Applying app.0001_initial... OK
なお、いずれの項目にもprimary_keyを設定しないでmigrateした場合は、マイグレーションファイル内で、以下のカラムが先頭に自動追加されます。
id = models.AutoField(primary_key=True)
AutoFieldはIntegerFieldと同じ数値項目で、管理画面からデータを追加する場合などには自動でインクリメントされます。
他にどのような型が用意されているかについて、詳細はマニュアルを参照してください。
いくつかのエンティティにリレーションを持たせたくなったときに利用するのがForeignKeyです。この説明は次回に回したいと思います。
この記事が気に入ったらサポートをしてみませんか?