LoginSignup
17
24

More than 3 years have passed since last update.

Django逆引きチートシート(Model編)

Posted at

テーブルの設定

テーブル名を設定したい

モデルクラスの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) 
17
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
24