下列參數是所有字段類型均可用的,並且都是可選擇的。html
Field.nullsql
若是爲True,Django 將空值以NULL 存儲到數據庫中。默認值是 False。數據庫
字符串字段例如CharField 和TextField 要避免使用null,由於空字符串值將始終儲存爲空字符串而不是NULL。若是字符串字段的null=True,那意味着對於「無數據」有兩個可能的值:NULL 和空字符串。在大多數狀況下,對於「無數據」聲明兩個值是贅餘的,Django 的慣例是使用空字符串而不是NULL。django
不管是字符串字段仍是非字符串字段,若是你但願在表單中容許空值,你將還須要設置blank=True,由於null 僅僅影響數據庫存儲。ide
注意函數
在使用Oracle 數據庫時,數據庫將存儲NULL 來表示空字符串,而與這個屬性無關。spa
若是你但願BooleanField 接受null 值,請用 NullBooleanField 代替。orm
Field.blankhtm
若是爲True,則該字段容許爲空白。 默認值是 False。對象
注意它與null不一樣。null 純粹是數據庫範疇的概念,而blank 是數據驗證範疇的。若是字段設置blank=True,表單驗證時將容許輸入空值。若是字段設置blank=False,則該字段爲必填。
Field.choices
它是一個可迭代的結構(好比,列表或是元組),由可迭代的二元組組成(好比[(A, B), (A, B) ...]),用來給這個字段提供選擇項。若是設置了 choices ,默認表格樣式就會顯示選擇框,而不是標準的文本框,並且這個選擇框的選項就是 choices 中的元組。
每一個元組中的第一個元素,是存儲在數據庫中的值;第二個元素是該選項更易理解的描述。 好比:
YEAR_IN_SCHOOL_CHOICES = ( ('FR', 'Freshman'), ('SO', 'Sophomore'), ('JR', 'Junior'), ('SR', 'Senior'), )
通常來講,最好在模型類內部定義choices,而後再給每一個值定義一個合適名字的常量。
from django.db import models class Student(models.Model): FRESHMAN = 'FR' SOPHOMORE = 'SO' JUNIOR = 'JR' SENIOR = 'SR' YEAR_IN_SCHOOL_CHOICES = ( (FRESHMAN, 'Freshman'), (SOPHOMORE, 'Sophomore'), (JUNIOR, 'Junior'), (SENIOR, 'Senior'), ) year_in_school = models.CharField(max_length=2, choices=YEAR_IN_SCHOOL_CHOICES, default=FRESHMAN) def is_upperclass(self): return self.year_in_school in (self.JUNIOR, self.SENIOR)
儘管你能夠在模型類的外部定義choices而後引用它,可是在模型類中定義choices和其每一個choice的name(即元組的第二個元素)能夠保存全部使用choices的類的信息, 也使得choices更容易被應用(例如, Student.SOPHOMORE 能夠在任何引入Student 模型的位置生效)。
你也能夠歸類可選的choices到已命名的組中用來達成組織整理的目的:
MEDIA_CHOICES = ( ('Audio', ( ('vinyl', 'Vinyl'), ('cd', 'CD'), ) ), ('Video', ( ('vhs', 'VHS Tape'), ('dvd', 'DVD'), ) ), ('unknown', 'Unknown'), )
每一個元組的第一個元素是組的名字。第二個元素是一組可迭代的二元元組,每個二元元組包含一個值和一個給人看的名字構成一個選項。分組的選項可能會和未分組的選項合在同一個list中。 (就像例中的unknown選項)。
對於有choices set的模型字段, Django 將會加入一個方法來獲取當前字段值的易於理解的名稱(即元組的第二個值)參見數據庫API文檔中的get_FOO_display()。
請注意choices能夠是任何可迭代的對象 – 不是必須是列表或者元組。這一點使你能夠動態的構建choices。可是若是你發現你本身搞不定動態的choices,你最好仍是使用ForeignKey來構建一個合適的數據庫表。若是有數據變更的話,choices意味着那些變更很少的靜態數據。
New in Django 1.7.
除非blank=False 和default一塊兒在字段中被設置,不然,可選擇菜單將會有"---------" 的標籤。要重寫這個行爲, 須要加入一個包含None的元組到 choices裏面; 例如 (None, 'Your String For Display'). 或者, 你能夠在操做有意義的地方用一個空字符串代替None - 好比在一個 CharField.
Field.db_column
數據庫中用來表示該字段的名稱。若是未指定,那麼Django將會使用Field名做爲字段名.
若是你的數據庫列名爲SQL語句的保留字,或者是包含不能做爲Python 變量名的字符,如連字符,沒問題。Django 會在後臺給列名和表名加上雙引號。
Field.db_index
若值爲 True, 則 django-admin sqlindexes 將會爲此字段輸出 CREATE INDEX 語句。(譯註:爲此字段建立索引)
Field.db_tablespace
若是該字段有索引的話,database tablespace的名稱將做爲該字段的索引名。 若是DEFAULT_INDEX_TABLESPACE 已經設置,則默認值是由DEFAULT_INDEX_TABLESPACE指定, 若是沒有設置則由 db_tablespace 指定,若是後臺數據庫不支持表空間,或者索引,則該選項被忽略
Field.default
該字段的默認值. 它能夠是一個值或者一個可調用對象. 若是是一個可調用對象,那麼在每一次建立新對象的時候,它將會調用一次.
這個默認值不能夠是一個可變對象(如字典,列表,等等),由於對於全部模型的一個新的實例來講,它們指向同一個引用。或者,把他們包裝爲一個可調用的對象。例如,你有一個自定義的JSONField,而且想指定一個特定的字典值,能夠以下使用:
def contact_default(): return {"email": "to1@example.com"} contact_info = JSONField("ContactInfo", default=contact_default)
請注意lambdas 函數不可做爲如 default 這類可選參數的值.由於它們沒法被 migrations命令序列化. 請參見文檔其餘部分。
默認值會在新實例建立而且沒有給該字段提供值時使用。若是字段爲主鍵,默認值也會在設置爲None時使用。
Changed in Django 1.8:
以前的版本不會使用None做爲主鍵
Field.editable
若是設爲False, 這個字段將不會出如今 admin 或者其餘 ModelForm. 他們也會跳過 模型驗證. 默認是True.
Field.error_messages
error_messages 參數可以讓你重寫默認拋出的錯誤信息。經過指定 key 來確認你要重寫的錯誤信息。
error_messages 的 key 值包括 null, blank, invalid, invalid_choice, unique, 和 unique_for_date. 其他的 error_messages 的 keys 是不同的在不一樣的章節下 Field types 。
New in Django 1.7.
這個 unique_for_date 的 error_messages 的key 是在 1.7 中加的。
Field.help_text
額外的 ‘help' 文本將被顯示在表單控件form中。即使你的字段沒有應用到一個form裏面,這樣的操做對文檔化也頗有幫助。
注意這 不 會自動添加 HTML 標籤。須要你在 help_text 包含本身須要的格式。例如:
help_text="Please use the following format: <em>YYYY-MM-DD</em>."
另外, 你可使用簡單文本和django.utils.html.escape()以免任何HTML特定的字符.請確保你所使用的help text可以避免那些由不受信任的用戶進行的跨站點腳本攻擊。
Field.primary_key
若爲 True, 則該字段會成爲模型的主鍵字段。
若是你沒有在模型的任何字段上指定 primary_key=True, Django會自動添加一個 AutoField 字段來充當主鍵。 因此除非你想要覆蓋默認的主鍵行爲,不然不須要在任何字段上設定primary_key=True 。
primary_key=True 暗含着null=False 和unique=True. 一個對象上只能擁有一個主鍵.
主鍵字段是隻讀的。若是你改變了一個已存在對象上的主鍵而且保存的話,會建立一個新的對象,而不是覆蓋舊的.
Field.unique
若是爲 True, 這個字段在表中必須有惟一值.
這是一個在數據庫級別的強制性動做,而且經過模型來驗證。若是你試圖用一個重複的值來保存unique 字段,那麼一個django.db.IntegrityError就會經過模型的save() 函數拋出來。
除了ManyToManyField、OneToOneField和FileField 之外的其餘字段類型均可以使用這個設置。
注意當設置unique 爲True 時,你不須要再指定 db_index,由於unique 自己就意味着一個索引的建立。
Field.unique_for_date
當設置它爲DateField 和DateTimeField 字段的名稱時,表示要求該字段對於相應的日期字段值是惟一的。
例如,你有一個title 字段設置unique_for_date="pub_date",那麼Django 將不容許兩個記錄具備相同的title 和pub_date。
注意,若是你將它設置爲DateTimeField,只會考慮其日期部分。此外,若是USE_TZ 爲True,檢查將以對象保存時的當前的時區 進行。
這是在模型驗證期間經過Model.validate_unique() 強制執行的,而不是在數據庫層級進行驗證。若是unique_for_date 約束涉及的字段不是ModelForm中的字段(例如,exclude中列出的字段或者設置了editable=False),Model.validate_unique() 將忽略該特殊的約束。
Field.unique_for_month
相似unique_for_date,只是要求字段對於月份是惟一的。
Field.unique_for_year
相似unique_for_date 和 unique_for_month。
Field.verbose_name
一個字段的可讀性更高的名稱。若是用戶沒有設定冗餘名稱字段,Django會自動將該字段屬性名中的下劃線轉換爲空格,並用它來建立冗餘名稱。
Field.validators
該字段將要運行的一個Validator 的列表。