溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于Django中models數(shù)據(jù)類型的簡介

發(fā)布時間:2020-06-28 15:43:41 來源:億速云 閱讀:308 作者:清晨 欄目:編程語言

小編給大家分享一下關(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è)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

AI