一 field options(全部字段共用)python
1 null 默認爲False,True則表示能夠爲null。(空字符串在數據庫中可能被存儲爲'')
git
2 blank 默認爲False,True表示能夠爲空。
正則表達式
3 choice 可選的,限制了該選項的字段值必須是所指定的choice中的一個。數據庫
4 db_column 數據庫column名稱。默認爲本字段的名稱。django
5 db_index 若是爲True的話,該字段的數據庫索引將會被建立app
6 default 設置該字段的默認值,能夠是值也能夠是對象。函數
7 editable 默認爲True,若爲False,則不會在admin/界面顯示
spa
8 primary_key 若設置爲True,則表示將該字段設置爲主鍵。通常狀況下django默認會設置一個自增加的id主鍵。
code
9 unique 若設置爲True,該字段值不可重複
對象
二 field type(字段類型,細分的話能夠分爲普通字段以及關係字段)
1 普通字段
1 AutoField() 根據已有id自增加的整形惟一字段,通常每一個model類不需設置該字段,由於django會爲每一個model自動設置。
django默認會爲每一個model類添加以下語句:id = models.AutoField(primary_key=True) 當其餘字段添加了primary_key屬性,則不會建立id字段了
每一個model類僅能有一個主鍵
2 BooleanField() 布爾型字段,默認的表單窗口部件是CheckBoxInput
3 CharField() 字符型字段,默認的表單窗口部件是TextInput。該字段類型有一個必需參數:max_length 在數據庫水平限定了字符串最大長度
4 DateField() 日期字段,字段的值是python中datetime.date的實例,默認的表單窗口是TextInput有幾個可選的參數:
auto_now=True/False:當設置爲True時,每當該對象使用save()時,該字段的值就會被更新。
auto_now_add=True/False: 當設置爲True時,該字段的值爲該對象被建立時的日期
5 DateTimeField() 日期和時間字段,值爲datetime.datetime實例。默認的表單窗口以及可選參數同上。
6 DecimalField() 混合精度的小數型數字字段。有兩個必需的參數:
max_digits=ingt_number:限定數字的最大位數(包含小數位)
decimal_places=int_number:存儲數字的小數位
#to store numbers up to 999 with a resolution of 2 decimal places, you’d use models.DecimalField(..., max_digits=5, decimal_places=2)
7 EmailField(max_length=254, **options) 郵件字段,使用EmailValidator進行驗證
8 FileField(upload_to=None, max_length=100, **options) 文件上傳字段。
這個字段不能設置primary_key和unique選項.在數據庫中存儲類型是varchar,默認最大長度爲100.
有兩個可選參數:
upload_to
若是使用默認的FileSystomStorage,文件將會存儲到settings文件中配置的MEDIA_ROOT路徑中。
upload_to的值也能夠爲可調用對象,經過調用這個對象能夠得到上傳路徑。
instance=: 定義了FileField的模型實例
filename='': 文件名稱。
storage 用來設定文件存儲倉庫
9 FilePathField(path=None, match=None, recursive=False, max_length=100, **options)
這個字段的值被限制在系統上某個目錄中的全部文件名集合中。有三個參數
path='': 該參數必需。上行所說的‘某個目錄’的絕對路徑。Example: "/home/images"
.
match='pattern': 可選參數。格式是正則表達式。用來揀選符合匹配正則表達式的文件
recursive=True/False: 可選參數,默認爲False。設定是否遞歸該目錄下全部子目錄的全部文件。
FilePathField(path="/home/images", match="foo.*", recursive=True)
10 FloatField() 浮點字段,默認的表單窗口部件是NumberInput。和DecimalField常常混淆不清,
FloatField在內部使用Python中的float對象,而DecimalField在內部使用Python中的decimal對象。
11 ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
圖像字段。繼承了FileField的全部屬性和方法。並且還能自動驗證上傳的對象是否爲合法的圖像。
12 IntegerField 整形字段。
13 GenericIPAddressField(protocol='both', unpack_ipv4=False, **options) ip地址字段
protocol='both/ipv4/ipv6' 默認爲both
unpack_ipv4 用處不大。
14 NullBooleanField 相似於BooleanField,不一樣的是其容許值爲null
15 TextField() 與CharField相似,但通常用來存儲體積較大的文本。
16 TimeField(auto_now=False, auto_now_add=False, **options) 時間字段,其值爲datetime.time實例
17 URLField(max_length=200, **options) URL字段
相似於CharField的子類,默認最大長度爲200.
18 UUIDField(**options) 通用惟一標識字段,當不想用django默認設置的AutoField字段時,能夠用該字段代替。
2 關係字段
關係字段:一對一,多對一,多對多
一對一: 如今有不少一對一輔導班,也就是上課時,一個老師對應一個學生,一個學生對應一個老師
多對一: 不少偏遠山區的學校可能整個學校只有一個老師,這一個老師對應多個學生,全部的學生對應這一個老師
多對多: 而咱們則很幸福,學校裏有許多老師,一個老師教習一科,學生有多個老師,老師有多個學生。
1 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 設置所關聯對象的關聯字段。默認爲關聯對象的主鍵字段。
2 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參數被使用時,該參數纔會有效。指定使用哪些中間模型字段來確立兩個模型的多對多關係。
3 OneToOneField(othermodel, on_delete, parent_link=False, **options) 一對一字段。
othermodel: .......
on_delete:........
related_name:...........