8 3 定義模型類

2021-10-07 20:56:46 字數 4406 閱讀 3714

接下來首先以"圖書-英雄"管理為例進行演示。

建立應用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=

'閱讀量'

) bcomment = 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,'female'),

(1,'male'))

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);

定義模型類

建立應用booktest,在models.py 檔案中定義模型類。from django.db import models 定義圖書模型類bookinfo class bookinfo models.model btitle models.charfield max length 20,verbos...

Django模型類定義

資料庫表名 可通過db table指明資料庫表名。關於主鍵 django會為表建立自動增長的主鍵列,每個模型只能有乙個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。屬性命名限制 字段型別...

8 3 類的繼承

物件導向的最大優點之一就是可以通過繼承來減少 同時靈活地定製新類。子類繼承父類後,就有了父類的屬性和方法,除了父類的私有屬性和私有方法 屬性名或方法名前面有兩個下劃線 的 子類中還可以通過過載來修改父類的方法,以實現與父類不同的行為或表現能力。例六 class ant def init self,x...