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