テーブルの設定
テーブル名を設定したい
モデルクラスの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)