Django-模型類
阿新 • • 發佈:2020-11-01
認識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: |
日期。 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自帶的應用
]
- 然後需要對模型類進行遷移
- 首先需要生成遷移檔案
命令:python manage.py makemigrations
這樣在應用的migrations
資料夾中就會生成遷移檔案
- 執行遷移生成表
命令:python manage.py migrate
根據遷移檔案生成表,生成的表名的預設格式:應用名_模型類名小寫,例:booktest_bookinfo