Django 模型類的使用,超級詳細版本

2021-10-23 04:10:18 字數 4656 閱讀 9944

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

1 定義

在models.py 檔案中定義模型類。

from django.db import models

# create your models here.

# 準備書籍列表資訊的模型類

class

bookinfo

(models.model)

:# 建立字段,字段型別...

name = models.charfield(max_length=

20, verbose_name=

'名稱'

) pub_date = models.datefield(verbose_name=

'發布日期'

,null=

true

) readcount = models.integerfield(default=

0, verbose_name=

'閱讀量'

) commentcount = models.integerfield(default=

0, verbose_name=

) is_delete = models.booleanfield(default=

false

, verbose_name=

'邏輯刪除'

)class

meta

: db_table =

'bookinfo'

# 指明資料庫表名

verbose_name =

'圖書'

# 在admin站點中顯示的名稱

def__str__

(self)

:"""定義每個資料物件的顯示資訊"""

return self.name

# 準備人物列表資訊的模型類

class

peopleinfo

(models.model)

: gender_choices =((

0,'male'),

(1,'female'))

name = models.charfield(max_length=

20, verbose_name=

'名稱'

) gender = models.smallintegerfield(choices=gender_choices, default=

0, verbose_name=

'性別'

) description = models.charfield(max_length=

200, null=

true

, verbose_name=

'描述資訊'

) book = models.foreignkey(bookinfo, on_delete=models.cascade, verbose_name=

'圖書'

)# 外來鍵

is_delete = models.booleanfield(default=

false

, verbose_name=

'邏輯刪除'

)class

meta

: db_table =

'peopleinfo'

verbose_name =

'人物資訊'

def__str__

(self)

:return self.name

資料庫表名

可通過db_table指明資料庫表名。

關於主鍵

django會為表建立自動增長的主鍵列,每個模型只能有乙個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。

預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。

屬性命名限制

不能是python的保留關鍵字。

不允許使用連續的下劃線,這是由django的查詢方式決定的。

定義屬性時需要指定字段型別,通過字段型別的引數指定選項,語法如下:

屬性=models.欄位型別(選項)
字段型別

型別說明

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,對上傳的內容進行校驗,確保是有效的選項

選項說明

null

如果為true,表示允許為空,預設值是false

blank

如果為true,則該字段允許為空白,預設值是false

db_column

欄位的名稱,如果未指定,則使用屬性的名稱

db_index

若值為true, 則在表中會為此字段建立索引,預設值是false

default

預設primary_key

若為true,則該字段會成為模型的主鍵字段,預設值是false,一般作為autofield的選項使用

unique

如果為true, 這個欄位在表中必須有唯一值,預設值是false

null是資料庫範疇的概念,blank是表單驗證範疇的外來鍵

在設定外來鍵時,需要通過on_delete選項指明主表刪除資料時,對於外來鍵引用表資料如何處理,在django.db.models中包含了可選常量:

2 遷移

將模型類同步到資料庫中。

生成遷移檔案

python manage.py makemigrations

同步到資料庫中

python manage.py migrate

3 新增測試資料

insert into bookinfo(name, pub_date, readcount,commentcount, 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 peopleinfo(name, gender, book_id, description, 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

);

考慮到資料庫 寫入速度的效率,所以此時沒有考慮到使用 orm

Django的模型類Meta

一懟 什麼是海盜精神?就是做自己喜歡做的事,哪怕它反抗了君主,我生而為狼,也像狼一樣死去。這就是海盜精神。在模型類中定義meta類來修改表名 class department models.model 部門類 name models.charfield max length 20 create da...

Django模型的使用

記錄django模型使用的注意事項。from django.db import models from account.models import user create your models here.class blog models.model title models.charfield ...

Django模型類定義

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