五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

Python Django模型詳解

發(fā)布日期:2021-12-28 18:28 | 文章來源:站長之家

Django模型

Django的模型定義在models.py文件中。模型是MVT中的M,也相當(dāng)于MVC中的M。

在Django中,模型必須繼承自Model類。例如:

from django.db import models
# Create your models here.
class BookInfo(models.Model): # 一個(gè)模型類就會(huì)對(duì)應(yīng)生成數(shù)據(jù)庫中的一張表
 """書籍模型"""  
 name = models.CharField(max_length=128, verbose_name='名稱')  # 類的屬性就是數(shù)據(jù)表中的字段。
 pub_date = models.DateField(verbose_name='發(fā)布日期',null=True)
 readcount = models.IntegerField(default=0, verbose_name='閱讀量')
 commentcount = models.IntegerField(default=0, verbose_name='評(píng)論量')
 is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除')
 class Meta:  # class Meta是固定寫法
  db_table = 'bookinfo'# 指明數(shù)據(jù)庫表名
  verbose_name = '圖書' # 在admin站點(diǎn)中顯示的名稱

注意

1.模型類如果未指明表名,Django默認(rèn)以小寫app應(yīng)用名_小寫模型類名為數(shù)據(jù)庫表名,一般我們會(huì)通過db_table指明數(shù)據(jù)庫表名。

2.django會(huì)為表創(chuàng)建自動(dòng)增長的主鍵列,每個(gè)模型只能有一個(gè)主鍵列,如果使用選項(xiàng)設(shè)置某屬性為主鍵列后django不會(huì)再創(chuàng)建自動(dòng)增長的主鍵列。默認(rèn)創(chuàng)建的主鍵列屬性為id,也可以使用pk,意為primary key.

3.字段名稱中不能出現(xiàn)雙下劃線,因?yàn)檫@是Django的查詢語法之一。

自Django3.2后,可以在settings.py中配置DEFAULT_AUTO_FIELD參數(shù)來設(shè)置主鍵的數(shù)據(jù)類型,默認(rèn)是DEFAULT_AUTO_FIELD = ‘django.db.models.BigAutoField',在Django3.2之前,默認(rèn)生成的主鍵數(shù)據(jù)類型是AutoField.

下面是Django中常用的字段類型的詳情

字段類型

類型 說明
BigAutoField 自動(dòng)增長的BigIntegerField,通常不用指定,不指定時(shí)Django會(huì)自動(dòng)創(chuàng)建屬性名為id的自動(dòng)增長屬性
BooleanField 布爾字段,值為True或False
NullBooleanField 支持Null、True、False三種值
CharField 字符串,參數(shù)max_length表示最大字符個(gè)數(shù)
TextField 大文本字段,一般超過4000個(gè)字符時(shí)使用
IntegerField 整數(shù)
DecimalField 十進(jìn)制浮點(diǎn)數(shù), 參數(shù)max_digits表示總位數(shù), 參數(shù)decimal_places表示小數(shù)位數(shù)
FloatField 浮點(diǎn)數(shù)
DateField 日期, 參數(shù)auto_now表示每次保存對(duì)象時(shí),自動(dòng)設(shè)置該字段為當(dāng)前時(shí)間,用于"最后一次修改"的時(shí)間戳,它總是使用當(dāng)前日期,默認(rèn)為False; 參數(shù)auto_now_add表示當(dāng)對(duì)象第一次被創(chuàng)建時(shí)自動(dòng)設(shè)置當(dāng)前時(shí)間,用于創(chuàng)建的時(shí)間戳,它總是使用當(dāng)前日期,默認(rèn)為False; 參數(shù)auto_now_add和auto_now是相互排斥的,組合將會(huì)發(fā)生錯(cuò)誤
TimeField 時(shí)間,參數(shù)同DateField
DateTimeField 日期時(shí)間,參數(shù)同DateField
FileField 上傳文件字段
ImageField 繼承于FileField,對(duì)上傳的內(nèi)容進(jìn)行校驗(yàn),確保是有效的圖片

下面是字段類型中的參數(shù)

字段類型的參數(shù)

參數(shù) 說明
null 如果為True,表示允許為空,默認(rèn)值是False
blank 如果為True,則該字段允許為空白,默認(rèn)值是False
db_column 字段的名稱,如果未指定,則使用屬性的名稱
db_index 若值為True, 則在表中會(huì)為此字段創(chuàng)建索引,默認(rèn)值是False
default 為字段指定默認(rèn)值
primary_key 若為True,則該字段會(huì)成為模型的主鍵字段,默認(rèn)值是False,一般作為AutoField的選項(xiàng)使用
unique 如果為True, 這個(gè)字段在表中必須有唯一值,默認(rèn)值是False
choices 該參數(shù)是從一系列的二元組中提供選項(xiàng)

注意

1.CharField字段必須要指定參數(shù)max_length

2.還可以為字段指定參數(shù)verbose_name,這個(gè)參數(shù)主要是用來在admin管理頁面使用,其實(shí)是和本地化有關(guān)的。例如可以在上面的name字段指定參數(shù)verbose_name=“書籍名稱”,那么在admin管理頁面就會(huì)看到書籍名稱。

3.null參數(shù)是數(shù)據(jù)庫層面的,設(shè)置null=True之后,表示數(shù)據(jù)庫的該字段可以為空;blank參數(shù)是表單層面(HTML),blank=True之后,表示表單填寫該字段的時(shí)候可以不填。

外鍵

外鍵這個(gè)東西,通常都是在業(yè)務(wù)邏輯層面來實(shí)現(xiàn)的,而不是在數(shù)據(jù)庫中實(shí)現(xiàn)。但是通常大家學(xué)習(xí)的數(shù)據(jù)庫課程中,都會(huì)有數(shù)據(jù)庫設(shè)計(jì)范式,其中有個(gè)第三范式就是專指的外鍵約束。在這里只是簡單的介紹一下。下面是另外一個(gè)模型,和前面的BookInfo模型通過外鍵關(guān)聯(lián)起來。

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 = '人物信息'
下面重點(diǎn)來說一下choices這個(gè)參數(shù)和models.ForeignKey。
choices參數(shù)就是從我們定義的二元組(GENDER_CHOICES)中獲取值。二元組的第一個(gè)值會(huì)儲(chǔ)存在數(shù)據(jù)庫中,而第二個(gè)值將只會(huì)用于在表單中顯示。對(duì)于一個(gè)模型實(shí)例,要獲取該字段二元組中相對(duì)應(yīng)的第二個(gè)值,使用 get_FOO_display() 方法。例如:獲取上面的性別信息,可以使用get_gender_display()方法。
外鍵:通過使用models.ForeignKey來設(shè)置外鍵,F(xiàn)oreignKey的第一個(gè)參數(shù)是要關(guān)聯(lián)的模型類名,第二個(gè)參數(shù)是on_delete。它的常用值可以如下:
CASCADE級(jí)聯(lián),刪除主表數(shù)據(jù)時(shí)連通一起刪除外鍵表中數(shù)據(jù)
PROTECT保護(hù),通過拋出ProtectedError異常,來阻止刪除主表中被外鍵應(yīng)用的數(shù)據(jù)
SET_NULL設(shè)置為NULL,僅在該字段null=True允許為null時(shí)可用
SET_DEFAULT設(shè)置為默認(rèn)值,僅在該字段設(shè)置了默認(rèn)值時(shí)可用
SET()設(shè)置為特定值或者調(diào)用特定方法
DO_NOTHING不做任何操作,如果數(shù)據(jù)庫前置指明級(jí)聯(lián)性,此選項(xiàng)會(huì)拋出IntegrityError異常

注意:我們在數(shù)據(jù)庫中,設(shè)置外鍵的時(shí)候需要制定另一張表中關(guān)聯(lián)的字段,但是在Django里并沒有指定。這是因?yàn)镈jango會(huì)默認(rèn)指定另外一張表的id作為關(guān)聯(lián)字段。如下圖所示:

可以看到peopleinfo這張表中的外鍵名稱是book_id

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注本站的更多內(nèi)容!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部