筆者は自己学習の一環でDjangoを使用しています。以下の内容が業界標準かどうかは保証できません。
主キー
from django.db import models
class Hoge(models.Model):
id = models.AutoField(primary_key=True) # 主キー
外部キーによるテーブルの関連付け
下記画像のようなER図とテーブル定義をmodels.pyで表現する
※見づらかったり、おかしな設計だったりは見逃してください
from django.db import models # 必須なインポート
class TrnCustomer(models.Model):
# Djangoで主キーを自動採番
id = models.AutoField(primary_key=True)
# Djangoで更新日時を自動登録
update_at = models.DateTimeField(auto_now=True)
class Meta:
# テーブル名を指定
db_table = 'TRN_CUSTOMER'
class TrnCustomerDetail(models.Model):
# 外部キーの設定
id = models.ForeignKey(TrnCustomer, on_delete=models.CASCADE, db_column='id')
# Djangoで主キーを自動採番
detail_id = models.AutoField(primary_key=True)
# Djangoで更新日時を自動登録
update_at = models.DateTimeField(auto_now=True)
class Meta:
# テーブル名を指定
db_table = 'TRN_CUSTOMER_DETAIL'
DateTimeField(auto_now=True) | 更新日時(TIMESTAMP)を自動で更新 |
ForeignKey(..., db_column='id') | 外部キー名が親テーブルの id と同じなので、db_column で明示 |
on_delete=models.CASCADE | 親が削除されたら子も削除されるように指定 |
日時などの自動登録
class Hoge(models.Model):
created_at = models.DateTimeField(auto_now_add=True) # 作成日時
updated_at = models.DateTimeField(auto_now=True) # 更新日時
| オプション | 主な用途 | 挙動 |
|---|
auto_now_add | 作成日時の記録 | 初回作成時のみ値をセット |
auto_now | 更新日時の記録 | 保存するたびに更新される |
データ型はDBMSによって異なる
| 層 | 型 |
|---|
| Django/Python | datetime.datetime |
| SQLite | TEXT |
| PostgreSQL | TIMESTAMP WITH TIME ZONE(既定) |
| MySQL | DATETIME または TIMESTAMP |
データベースに格納する時に値を変換したい場合
例えば〇と×の選択肢があったとして、「〇を選択した場合は1」で「×なら2」というような状況。
この場合はmodels.pyで対応します。
# models.py
class hoge():
# 変換方法を定義
CHOICES = [
(1, "〇"),
(2, "×")
]
# フィールドを定義
answer = models.CharField(max_length=1, choices=CHOICES)
コメント