テーブルの設定
テーブル名を設定したい
モデルクラスのMetaクラスに記述する
models.py
from django.db import models
class Product(models.Model):
### 略 ###
class Meta:
db_table = "products" # テーブル名を指定
カラムの定義
カラムを定義したい
モデルクラスに記述する
models.py
from django.db import models
class Product(models.Model):
# *Field()でカラム名(name)と型(text)を設定する
name = models.TextField()
| データ | DB(postgresql)のカラム型 | 書き方 |
|---|---|---|
| 自動採番(4byte整数) | serial |
AutoField() |
| 4byte整数 | integer |
IntegerField() |
| 精度付き実数 | numeric(<精度>, <桁数>) |
DecimalField(max_digits=<精度>, decimal_places=<桁数>) |
| 日付 | date |
DateField() |
| 時刻 | time |
TimeField() |
| 日付+時刻 | timestamp |
DateTimeField() |
| テキスト(文字数制限なし) | ||
| ) | text |
TextField() |
| 文字列(文字数制限あり) | character varying(<文字数>) |
CharField(max_length=<文字数>) |
| 論理値 | boolean |
BooleanField() |
主キー(プライマリキー)を設定したい
フィールド定義のキーワード引数でprimary_key=Trueとする
一意性制約を設定したい
フィールド定義のキーワード引数でunique=Trueとする
NOT NULL制約をオフにしたい
フィールド定義のキーワード引数でnull=Trueとする
デフォルト値を設定したい
フィールド定義のキーワード引数でdefault=<デフォルト値>とする
〜〜区分、〜〜コードなどを設定したい
フィールド定義のキーワード引数でchoises=[("01", "登録"), ("02", "解除"), ("03", "取消")]のようにタプルのリストを指定する
インデックスを作成したい
フィールド定義のキーワード引数でindex=Trueとする
データベースのカラム名を指定した
フィールド定義のキーワード引数でdb_column=<カラム名>とする
insertのときに自動で登録タイムスタンプが入るようにしたい
- カラム定義は
DateTimeFieldを使用する - フィールド定義のキーワード引数で
auto_now_add=Trueとする
updateのときに自動で更新タイムスタンプが入るようにしたい
- カラム定義は
DateTimeFieldを使用する - フィールド定義のキーワード引数で
auto_now=Trueとする
関連の定義
1:1関連を設定したい
モデルクラスに記述する
models.py
from django.db import models
class OrderDetail(models.Model):
# このようにOneToOneField()でカラム名(変数名をproductとすればカラム名はproduct_idとなる)を設定する
product = models.OneToOneField(Product, on_delete=models.CASCADE)
1:N関連を設定したい
モデルクラスに記述する(N側に1側エンティティの外部キーを設定する)
models.py
from django.db import models
class OrderDetail(models.Model):
# ForeignKey()でカラム名(変数名をorderとすればカラム名はorder_idとなる)を設定する
order = models.ForeignKey(Order, on_delete=models.CASCADE)