您好,登錄后才能下訂單哦!
小編給大家分享一下關(guān)于Django中models數(shù)據(jù)類型的簡介,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!
介紹:在model中添加字段的格式一般為:“field_name = field_type(**field_options)”
1、field options(所有字段共用)
null默認(rèn)為False,True則表示可以為null。(空字符串在數(shù)據(jù)庫中可能被存儲為'')
blank默認(rèn)為False,True表示可以為空。
choice可選的,限制了該選項的字段值必須是所指定的choice中的一個。
db_column 數(shù)據(jù)庫column名稱。默認(rèn)為本字段的名稱。
db_index 如果為True的話,該字段的數(shù)據(jù)庫索引將會被創(chuàng)建。
default 設(shè)置該字段的默認(rèn)值,可以是值也可以是對象。
editable 默認(rèn)為True,若為False,則不會在admin/界面顯示
primary_key 若設(shè)置為True,則表示將該字段設(shè)置為主鍵。一般情況下django默認(rèn)會設(shè)置一個自增長的id主鍵。
unique 若設(shè)置為True,該字段值不可重復(fù)。
2、field type(可以分為普通字段以及關(guān)系字段)
普通字段
AutoField() 根據(jù)已有id自增長的整形唯一字段,一般每個model類不需設(shè)置該字段,因為django會為每個model自動設(shè)置。
django默認(rèn)會為每個model類添加如下語句:id = models.AutoField(primary_key=True) 當(dāng)其他字段添加了primary_key屬性,則不會創(chuàng)建id字段了。
每個model類僅能有一個主鍵。
BooleanField() 布爾型字段,默認(rèn)的表單窗口部件是CheckBoxInput。
CharField() 字符型字段,默認(rèn)的表單窗口部件是TextInput。該字段類型有一個必需參數(shù):max_length 在數(shù)據(jù)庫水平限定了字符串最大長度。
DateField() 日期字段,字段的值是python中datetime.date的實例,默認(rèn)的表單窗口是TextInput有幾個可選的參數(shù):
auto_now=True/False:當(dāng)設(shè)置為True時,每當(dāng)該對象使用save()時,該字段的值就會被更新。
auto_now_add=True/False: 當(dāng)設(shè)置為True時,該字段的值為該對象被創(chuàng)建時的日期。
DateTimeField() 日期和時間字段,值為datetime.datetime實例。默認(rèn)的表單窗口以及可選參數(shù)同上。
DecimalField() 混合精度的小數(shù)型數(shù)字字段。有兩個必需的參數(shù):
max_digits=ingt_number:限定數(shù)字的最大位數(shù)(包含小數(shù)位)。
decimal_places=int_number:存儲數(shù)字的小數(shù)位。
EmailField(max_length=254, **options) 郵件字段,使用EmailValidator進(jìn)行驗證。
關(guān)系字段
關(guān)系字段:一對一,多對一,多對多
一對一: 現(xiàn)在有很多一對一輔導(dǎo)班,也就是上課時,一個老師對應(yīng)一個學(xué)生,一個學(xué)生對應(yīng)一個老師
多對一: 很多偏遠(yuǎn)山區(qū)的學(xué)校可能整個學(xué)校只有一個老師,這一個老師對應(yīng)多個學(xué)生,所有的學(xué)生對應(yīng)這一個老師
多對多: 而我們則很幸福,學(xué)校里有許多老師,一個老師教習(xí)一科,學(xué)生有多個老師,老師有多個學(xué)生。
ForeignKey(othermodel, on_delete, **options) 多對一或者一對多或者外鍵字段。
othermodel: 所關(guān)聯(lián)的模型,'多' model使用外鍵關(guān)聯(lián) '一'model。
當(dāng)所關(guān)聯(lián)的模型為他自己時,使用'self'
當(dāng)引用的模型為其他app中的模型時,要加上app名稱標(biāo)簽: 'app_name.model_name'
數(shù)據(jù)庫會自動在外鍵字段上創(chuàng)建索引,可以使用de_index=False關(guān)閉該功能。
on_delete: 當(dāng)刪除 "一" 模型對象時,django會根據(jù)該參數(shù)的值對與該對象相關(guān)聯(lián)的其他對象(也就是 ‘多’)進(jìn)行操作。
在django1.9以及之前的版本中,on_delete作為一個關(guān)鍵字參數(shù)。而在1.10則可以作為第二個參數(shù)
models.CASCADE: 默認(rèn)為models.CASCADE 級聯(lián)刪除。當(dāng)刪除'一'時,‘多’會被刪除。比如:
modles.PROTECT : 當(dāng)刪除一個具有外鍵關(guān)系的對象時,會引發(fā)一個異常,阻止刪除該對象
models.SET_NULL: 設(shè)置刪除對象所關(guān)聯(lián)的外鍵字段為null。但字段的null屬性必需為True
models.SET_DEFAULT : 設(shè)置刪除對象所關(guān)聯(lián)的外鍵字段為默認(rèn)的值。
models.SET(value) :設(shè)置刪除對象所關(guān)聯(lián)的對象的外鍵字段為value,value也可以是一個可調(diào)用函數(shù)。
models.DO_NOTHING : 不做任何操作
limit_choices_to 限制該字段為選項形。格式:limit_choices_to={'is_staff': True}。值也可以為可調(diào)用函數(shù)。
related_name 設(shè)置從關(guān)聯(lián)對象到自身的關(guān)系的名稱,若值為'+' 則關(guān)聯(lián)對象與自身無逆向關(guān)系。詳解請看官方文檔。
to_field 設(shè)置所關(guān)聯(lián)對象的關(guān)聯(lián)字段。默認(rèn)為關(guān)聯(lián)對象的主鍵字段。
ManyToManyField(othermodel, **options) 多對多字段。
othermodel: 所關(guān)聯(lián)的model名稱
db_table: 多對多關(guān)系會在兩個模型所對應(yīng)的表中間創(chuàng)建一個‘中間表’ ,將多對多轉(zhuǎn)換為兩個多對一,該選項為這個中間表設(shè)置名稱。一般來說django會默認(rèn)為中間表創(chuàng)建名稱,但人們讀起來可能搞不清楚究竟中間表關(guān)聯(lián)到了哪里。
related_name: 同多對一字段中的related_name
limite_choices_to: 同....
symmetrical: 當(dāng)多對多關(guān)聯(lián)對象為自身時可能會用到的參數(shù)。默認(rèn)為True。a,b同屬于person模型,person中的friends字段與自身設(shè)置了多對多關(guān)系,當(dāng)該值設(shè)置為True時,django假定關(guān)系為對稱,即:a是b的朋友,那么b也是a的朋友。設(shè)置為False時,django會強制為逆向關(guān)系創(chuàng)建描述信息。
though: 不想讓django自動創(chuàng)建中間表,手動創(chuàng)建中間表所對應(yīng)的model,通過though指定對應(yīng)的model名稱。
though_field: 當(dāng)though參數(shù)被使用時,該參數(shù)才會有效。指定使用哪些中間模型字段來確立兩個模型的多對多關(guān)系。
看完了這篇文章,相信你對Django中models數(shù)據(jù)類型有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。