接下來首先以"圖書-英雄"管理為例進行演示。
建立應用booktest,在models.py 檔案中定義模型類。
from django.db import models
#定義圖書模型類bookinfo
class bookinfo(models.model):
btitle = models.charfield(max_length=20, verbose_name='名稱')
bpub_date = models.datefield(verbose_name='發布日期')
bread = models.integerfield(default=0, verbose_name='閱讀量')
is_delete = models.booleanfield(default=false, verbose_name='邏輯刪除')
class meta:
db_table = 'tb_books' # 指明資料庫表名
verbose_name = '圖書' # 在admin站點中顯示的名稱
verbose_name_plural = verbose_name # 顯示的複數名稱
def __str__(self):
"""定義每個資料物件的顯示資訊"""
return self.btitle
#定義英雄模型類heroinfo
class heroinfo(models.model):
gender_choices = (
(0, 'male'),
(1, 'female')
)hname = models.charfield(max_length=20, verbose_name='名稱')
hgender = models.smallintegerfield(choices=gender_choices, default=0, verbose_name='性別')
hcomment = models.charfield(max_length=200, null=true, verbose_name='描述資訊')
hbook = models.foreignkey(bookinfo, on_delete=models.cascade, verbose_name='圖書') # 外來鍵
is_delete = models.booleanfield(default=false, verbose_name='邏輯刪除')
class meta:
db_table = 'tb_heros'
verbose_name = '英雄'
verbose_name_plural = verbose_name
def __str__(self):
return self.hname
1) 資料庫表名
可通過db_table指明資料庫表名。
2) 關於主鍵
django會為表建立自動增長的主鍵列,每個模型只能有乙個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。
預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。
3) 屬性命名限制
4)字段型別型別
說明autofield
自動增長的integerfield,通常不用指定,不指定時django會自動建立屬性名為id的自動增長屬性
booleanfield
布林字段,值為true或false
nullbooleanfield
支援null、true、false三種值
charfield
字串,引數max_length表示最大字元個數
textfield
大文字字段,一般超過4000個字元時使用
integerfield
整數decimalfield
十進位制浮點數, 引數max_digits表示總位數, 引數decimal_places表示小數字數
floatfield
浮點數datefield
日期, 引數auto_now表示每次儲存物件時,自動設定該字段為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為false; 引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為false; 引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤
timefield
時間,引數同datefield
datetimefield
日期時間,引數同datefield
filefield
上傳檔案字段
imagefield
繼承於filefield,對上傳的內容進行校驗,確保是有效的
5) 選項選項
說明null
如果為true,表示允許為空,預設值是false
blank
如果為true,則該字段允許為空白,預設值是false
db_column
欄位的名稱,如果未指定,則使用屬性的名稱
db_index
若值為true, 則在表中會為此字段建立索引,預設值是false
default
預設primary_key
若為true,則該字段會成為模型的主鍵字段,預設值是false,一般作為autofield的選項使用
unique
如果為true, 這個欄位在表中必須有唯一值,預設值是false
null是資料庫範疇的概念,blank是表單驗證範疇的
6) 外來鍵
在設定外來鍵時,需要通過on_delete選項指明主表刪除資料時,對於外來鍵引用表資料如何處理,在django.db.models中包含了可選常量:
將模型類同步到資料庫中。
1)生成遷移檔案
python manage.py makemigrations
2)同步到資料庫中
python manage.py migrate
insert into tb_books(btitle,bpub_date,bread,bcomment,is_delete) values
('射鵰英雄傳','1980-5-1',12,34,0),
('天龍八部','1986-7-24',36,40,0),
('笑傲江湖','1995-12-24',20,80,0),
('雪山飛狐','1987-11-11',58,24,0);
insert into tb_heros(hname,hgender,hbook_id,hcomment,is_delete) values
('郭靖',1,1,'降龍十八掌',0),
('黃蓉',0,1,'打狗棍法',0),
('黃藥師',1,1,'彈指神通',0),
('歐陽鋒',1,1,'**功',0),
('梅超風',0,1,'九陰白骨爪',0),
('喬峰',1,2,'降龍十八掌',0),
('段譽',1,2,'六脈神劍',0),
('虛竹',1,2,'天山六陽掌',0),
('王語嫣',0,2,'神仙姐姐',0),
('令狐沖',1,3,'獨孤九劍',0),
('任盈盈',0,3,'彈琴',0),
('岳不群',1,3,'華山劍法',0),
('東方不敗',0,3,'葵花寶典',0),
('胡斐',1,4,'胡家刀法',0),
('苗若蘭',0,4,'黃衣',0),
('程靈素',0,4,'醫術',0),
('袁紫衣',0,4,'六合拳',0);
django模型類之總結1
1 用過django就知道django的model有多方便 首先介紹下django的模型有哪些屬性 先看例子 django 模型類的meta是乙個內部類,它用於定義一些django模型類的行為特性。以下對此作一總結 這個屬性是定義當前的模型類是不是乙個抽象類。所謂抽象類是不會對應資料庫表的。一般我們...
Django建立模型
在django中寫乙個資料庫驅動的web應用的第一步是定義模型,這是資料庫結構設計和附加的其他元資料。在投票應用中,將建立question 問題 和choice 選項 兩個模型,question模型包括問題描述和發布時間,choice模型包括選項描述和當前得票數。每個選項屬於乙個問題。重寫polls...
Django的模型類Meta
一懟 什麼是海盜精神?就是做自己喜歡做的事,哪怕它反抗了君主,我生而為狼,也像狼一樣死去。這就是海盜精神。在模型類中定義meta類來修改表名 class department models.model 部門類 name models.charfield max length 20 create da...