10django模型[模型類]
定義屬性
Django根據屬性的型別確定以下資訊:
當前選擇的資料庫支援欄位的型別
渲染管理表單時使用的預設html控制元件
在管理站點最低限度的驗證 django會為表建立自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。
預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。
注意:pk是主鍵的別名,若主鍵名為id2,那麼pk是id2的別名。
屬性命名限制:
不能是python的保留關鍵字。
不允許使用連續的下劃線,這是由django的查詢方式決定的,在後面會詳細講解查詢。
定義屬性時需要指定欄位型別,通過欄位型別的引數指定選項,語法如下:
屬性=models.欄位型別(選項)
欄位型別
使用時需要引入django.db.models包,欄位型別如下:
AutoField:自動增長的IntegerField,通常不用指定,不指定時Django會自動建立屬性名為id的自動增長屬性。(必須填入引數primary_key=True)
from django.db import models
class UserInfo(models.Model):
# 自動建立一個列名為id的且為自增的整數列
username = models.CharField(max_length=32)
class Group(models.Model):
# 自定義自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
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]):日期。
引數auto_now表示每次儲存物件時,自動設定該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為false。
引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為false。
引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。
TimeField:時間,引數同DateField。
DateTimeField:日期時間,引數同DateField。
FileField:上傳檔案欄位。
引數 說明
upload_to = "" 上傳檔案的儲存路徑
storage = None 儲存元件,預設django.core.files.storage.FileSystemStorage
ImageField:繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片。
引數 說明
upload_to = "" 上傳檔案的儲存路徑
storage = None 儲存元件,預設django.core.files.storage.FileSystemStorage
width_field=None 上傳圖片的高度儲存的資料庫欄位名(字串)
height_field=None 上傳圖片的寬度儲存的資料庫欄位名(字串)
選項
通過選項實現對欄位的約束,選項如下:
null:如果為True,表示允許為空,預設值是False。
blank:如果為True,則該欄位允許為空白,預設值是False。
對比:null是資料庫範疇的概念,blank是表單驗證範疇的。
db_column:欄位的名稱,如果未指定,則使用屬性的名稱。
db_index:若值為True, 則在表中會為此欄位建立索引,預設值是False。
default:預設值。
primary_key:若為True,則該欄位會成為模型的主鍵欄位,預設值是False,一般作為AutoField的選項使用。
unique:如果為True, 這個欄位在表中必須有唯一值,預設值是False。
綜合演練
修改booktest/models.py中的模型類,程式碼如下:
from django.db import models
定義圖書模型類BookInfo
class BookInfo(models.Model):
#btitle = models.CharField(max_length=20)#圖書名稱
btitle = models.CharField(max_length=20, db_column='title')#通過db_column指定btitle對應表格中欄位的名字為title
bpub_date = models.DateField()#釋出日期
bread = models.IntegerField(default=0)#閱讀量
bcomment = models.IntegerField(default=0)#評論量
isDelete = models.BooleanField(default=False)#邏輯刪除
定義英雄模型類HeroInfo
class HeroInfo(models.Model):
hname = models.CharField(max_length=20)#英雄姓名
hgender = models.BooleanField(default=True)#英雄性別
isDelete = models.BooleanField(default=False)#邏輯刪除
#hcomment = models.CharField(max_length=200)#英雄描述資訊
hcomment = models.CharField(max_length=200, null=True, blank=False) #hcomment對應的資料庫中的欄位可以為空,但通過後臺管理頁面新增英雄資訊時hcomment對應的輸入框不能為空
hbook = models.ForeignKey('BookInfo')#英雄與圖書表的關係為一對多,所以屬性定義在英雄模型類中
然後生成遷移檔案並執行遷移命令,最後檢視test2資料庫中的內容。
相關文章
- IO模型學習(一)IO模型分類模型
- 文字分類模型文字分類模型
- 命令建立模型類模型
- 獨立模型 和分類模型
- 分類模型——Logistics Regression模型
- laravel模型無限分類Laravel模型
- swift 資料模型Modle類Swift模型
- 分類——決策樹模型模型
- [需求建議]跨模型呼叫?分類能呼叫單獨模型?模型
- Spark構建聚類模型(二)Spark聚類模型
- 機器學習之使用sklearn構建據類模型,並且評價模型機器學習模型
- 軟體測試模型-其他模型 (W 模型|H 模型|X 模型)模型
- 模型壓縮-模型蒸餾、模型剪枝、模型量化模型
- DRF-模型類序列化器模型
- sklearn 細節 —— SGDClassifier、Perceptron(分類模型)模型
- 報表工具分類-數學模型模型
- Python線性分類模型簡介Python模型
- 思維視覺化的 4 類模型視覺化模型
- Stella 知識庫--模型類的設計模型
- 機器學習引數模型與非引數模型/生成模型與判別模型機器學習模型
- 軟體開發模型/原型法/瀑布模型/螺旋模型模型原型
- 生成模型與判別模型模型
- 如何評價我們分類模型的效能?模型
- 《Spark機器學習》筆記——Spark構建聚類模型Spark機器學習筆記聚類模型
- 第四章 線性分類模型模型
- 聚類模型的演算法效能評價聚類模型演算法
- (一)文字分類經典模型之CNN篇文字分類模型CNN
- 分類模型的演算法效能評價模型演算法
- 訓練PaddleOCR文字方向分類模型模型
- 軟體測試模型-瀑布模型模型
- 軟體測試模型-V 模型模型
- 軟體測試模型-敏捷模型模型敏捷
- 從貧血模型到充血模型模型
- DOM 模型(文件物件模型)重點模型物件
- 理解BW資料模型 - DSO模型模型
- 軟體測試中的V模型、W模型和H模型模型
- 關於分類的線性模型的討論模型
- [提問交流]分類如何繫結獨立模型??模型