1. 程式人生 > 實用技巧 >Django-模型類

Django-模型類

認識Django模型類

 django中內嵌了ORM框架,ORM框架可以將類和資料表進行對應,只需要通過類和物件就可以對資料表進行操作。模型準確且唯一的描述了資料。它包含您儲存的資料的重要欄位和行為。一般來說,每一個模型都對映一張資料庫表。

模型類的設計

  • 設計模型類,需要在應用的models.py中進行
  • 模型類必須繼承django.db.models.Model
from django.db import models

# Create your models here.


# 一類
class BookInfo(models.Model):
    '''圖書模型類'''
    
    # 圖書名 CharField說明是一個字串,max_length指定字串的最大長度
    btitle = models.CharField(max_length=20)
    # 出版日期 Datefield說明是一個日期型別
    bpub_date = models.DateField()

    def __str__(self):
        # 改寫魔法屬性,返回書名
        return self.btitle
    
# 多類
class HeroInfo(models.Model):
    """英雄人物類"""
    
    # 英雄名 hname
    hname = models.CharField(max_length=20)
    # 性別 hgender BooleanField說明是bool型別 default指定預設值 False代表男
    hgender = models.BooleanField(default=False)
    # 備註
    hcomment = models.CharField(max_length=128)
    # 屬性關係 book 建立圖書類和英雄人物類之間的一對多關係
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE)
    def __str__(self):
        # 改寫魔法屬性,返回英雄名
        return self.hname
  • Models.ForeignKey可以建立兩個模型類之間一對多的關係,django在生成表的時候,就會在多端的表中建立一列作為外來鍵,建立兩個表之間一對多的關係。

模型類屬性命名限制

模型類屬性命名限制

  • 不能是python的保留關鍵字
  • 不允許使用連續的下劃線(這是由python的查詢方式決定的)
  • 定義屬性時需要指定欄位型別,通過欄位型別的引數指定選項,例:屬性名=models.欄位型別(選項)
    欄位型別
型別 描述
AutoField 自動增長的IntegerField,通常不用指定,不指定時Django會自動建立屬性名為id的自動增長屬性。
BooleanField
布林欄位,值為True或False。
NullBooleanField 支援Null、True、False三種值。
CharField(max_length=最大長度) 字串。引數max_length表示最大字元個數。
TextField 大文字欄位,一般超過4000個字元時使用。
IntegerField 整數
DecimalField(max_digits=None, decimal_places=None) 十進位制浮點數。引數max_digits表示總位。引數decimal_places表示小數位數。
FloatField 浮點數。引數同上
DateField:
([auto_now=False, auto_now_add=False])
日期。 1)引數auto_now表示每次儲存物件時,自動設定該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為false。 2) 引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為false。 3)引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。
TimeField 時間,引數同DateField。
DateTimeField 日期時間,引數同DateField。
FileField 上傳檔案欄位。
ImageField 繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片。

選項

選項名 描述
default 預設值。設定預設值。
primary_key 若為True,則該欄位會成為模型的主鍵欄位,預設值是False,一般作為AutoField的選項使用。
unique 如果為True, 這個欄位在表中必須有唯一值,預設值是False。
db_index 若值為True, 則在表中會為此欄位建立索引,預設值是False。
db_column 欄位的名稱,如果未指定,則使用屬性的名稱。
null 如果為True,表示允許為空,預設值是False。
blank 如果為True,則該欄位允許為空白,預設值是False。

對比:null是資料庫範疇的概念,blank是後臺管理頁面表單驗證範疇的

 當修改模型類之後,如果新增的選項不影響表的結構,則不需要重新做遷移,商品的選項中default和blank不影響表結構。

使用模型類

  • 一旦定義了你的模型,你需要告訴 Django 你準備使用這些模型。需要修改設定檔案中的INSTALLED_APPS,在這個設定中新增包含 models.py 檔案的模組名稱
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'booktest', # 註冊應用,前面的都是Django自帶的應用
]
  • 然後需要對模型類進行遷移
  1. 首先需要生成遷移檔案

 命令:python manage.py makemigrations

 這樣在應用的migrations資料夾中就會生成遷移檔案

  1. 執行遷移生成表

 命令:python manage.py migrate

 根據遷移檔案生成表,生成的表名的預設格式:應用名_模型類名小寫,例:booktest_bookinfo