第七章、模型詳解 -- 字段類型

ORM回顧

ORM(Object-Relation Mapping),對象-關係映射,對於開發人員主要帶來了如下好處:

  • 實現了數據模型與數據庫的解耦,通過簡單的配置就可以輕鬆更換數據庫,而不需要修改代碼。
  • 只需要面向對象編程,不需要面向數據庫編寫代碼。
  • 在MVT中Model中定義的類,通過ORM與關係型數據庫中的表對應,對象的屬性體現對象間的關係,這種關係也被映射到數據表中。

Django框架中ORM示意圖如下:

模型創建步驟回顧

  • 在models.py中定義模型類
  • 生成遷移文件
  • 執行遷移

定義屬性

語法格式:屬性 = models.字段類型(選項)

屬性命名限制:

  • 不能是python的保留關鍵字
  • 不允許使用連續的下劃線
  • 定義屬性時需要指定字段類型,通過字段類型的參數指定選項

說明:

  • Django會爲表創建自動增長的主鍵列,每個模型類只能有一個主鍵列
  • 如果在數據庫中設置了主鍵,Django將不會創建主鍵列
  • 默認創建的主鍵列屬性爲id,可以使用pk代替,pk表示primary key。
  • pk是主鍵的別名,若主鍵名爲id2,那麼pk是id2的別名。

字段類型

使用時需要引入django.db.models包,字段類型如下:

數據類型 說明
AutoField 自動增長的IntegerField,通常不用指定
不指定時Django會自動創建屬性名爲id的自動增長屬性。
BooleanField 布爾字段,值爲True或False。
NullBooleanField 支持Null、True、False三種值。
CharField 字符串
CharField (max_length=字符長度)
max_length表示最大字符個數
TextField 大文本字段,一般超過4000個字符時使用。
IntegerField 整數
DecimalField 十進制浮點數
DecimalField (max_digits=None, decimal_places=None)
max_digits表示總位數,decimal_places表示小數位數
FloatField 浮點數
DateField 日期
DateField [auto_now=False, auto_now_add=False])
auto_now每次保存對象時,自動設置該字段爲當前時間
auto_now_add當對象第一次被創建時自動設置當前時間
auto_now_addauto_now互斥,組合將會發生錯誤。
TimeField 時間,參數同DateField
DateTimeField 日期時間,參數同DateField
FileField 上傳文件字段
ImageField 繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片

選項

通過選項設置字段的約束,選項如下:

選項 說明
null 設置非空約束,默認爲False
blank 表示字段允許爲空,默認爲False
null是數據庫範疇的概念,blank是表單驗證範疇的
db_column 指定字段的名稱,缺省使用屬性名
db_index 表示爲此字段創建索引,默認爲False
default 默認值
primary_key 設置主鍵約束,默認爲False,通常作爲AutoField的選項使用
unique 設置唯一約束,默認爲False

實例演練

  • 在SQLyog中新建數據庫 test2

  • 修改models.py中的模型類,編碼如下:

 

from django.db import models

# 定義圖書模型類BookInfo
class BookInfo(models.Model):
    # 指定btitle對應的字段名爲title
    btitle = models.CharField(max_length=20, db_column='title')

    bpub_date = models.DateField()  # 發佈日期
    bread = models.IntegerField(default=0)  # 閱讀量
    bcomment = models.IntegerField(default=0)  # 評論量
    isDelete = models.BooleanField(default=False)  # 邏輯刪除


# 定義人物模型類PersonInfo
class PersonInfo(models.Model):
    pname = models.CharField(max_length=20)  # 人物姓名
    pgender = models.BooleanField(default=True)  # 人物性別
    isDelete = models.BooleanField(default=False)  # 邏輯刪除

    # 人物描述,數據庫中的字段可以爲空,但後臺管理頁面的輸入框不能爲空
    pcomment = models.CharField(max_length=200, null=True, blank=False)
  • 生成遷移文件並執行,查看test2數據庫中的內容

     

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章