字段選項
下列參數是所有字段類型均可用的,並且都是可選擇的。正則表達式
null
-
Field.
null
若是爲 True
, Django 將把空值在數據庫中存爲 NULL
,默認爲 is False
。sql
不要爲字符串類型字段設置 null
,例如 CharField
和 TextField
。由於這樣會把空字符串存爲 NULL
。 若是字符串字段設置了 null=True
,那意味着對於「無數據」有兩個可能的值: null
和空字符串。 這種明顯是多餘的,Django 的慣例是使用空字符串而不是NULL。數據庫
不管是字符串字段仍是非字符串字段,若是你但願在表單中容許存在空值,必需要設置 blank=True
,由於僅僅影響數據庫存儲。(參見 blank
)。express
註解
在使用Oracle 數據庫時,數據庫將存儲 NULL
來表示空字符串,而與這個屬性無關。
若是你但願 BooleanField
接受 null
值, 那麼使用 NullBooleanField
代替。
blank
-
Field.
blank
若是爲 True
, 則該字段容許爲空。默認爲 False
。
注意它和 null
不一樣。 null
純粹是數據庫範疇的概念,而 blank
是數據驗證範疇。 若是字段設置 blank=True
, 表單驗證時將容許輸入空值。若是字段設置 blank=False
, 則該字段爲必填。
choices
-
Field.
choices
它是一個可迭代的結構(e.g., 列表或元組) 。由可迭代的二元組組成 (e.g. [(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
模型的地方生效)。
也能夠將選項歸類到已命名的組中用來達成組織整理的目的:
MEDIA_CHOICES = (
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
)
每一個元組的第一個元素是組的名字。 第二個元素是一組可迭代的二元元組, 每個二元元組包含一個值和一個適合人看的名字構成一個選項。 分組的選項可能會和未分組的選項合在同一個list中。 (就像例中的 unknown 選項)。
對於包含 choices
的模型字段, Django 將會加入一個方法來獲取當前字段值的易於理解的名稱 (即元組的第二個值)。參見數據庫API文檔中的 get_FOO_display()
。
choices 只要是可迭代的對象就行 – 並不必定要是列表和元組。這樣你能夠動態構建choices。 可是若是你本身搞不定動態的 choices
。你最好仍是使用 ForeignKey
來構建一個合適的數據庫表。 而對於靜態數據來講, choices
是不改變的。
除非在字段中設置了 blank=False
不然將選擇框中將包含一個 "---------"
的標籤。 只要在添加一個 None
到 choices
元組中就能夠改變這一行爲。e.g. (None, 'Your String For Display')
, 或者, 你能夠用一個空字符串代替 None
好比在一個 CharField
。
db_column
-
Field.
db_column
數據庫中儲存該字段的列名。若是未指定,那麼Django將會使用Field名做爲字段名。
若是你的數據庫列名是SQL語句的保留字,或者是包含不能做爲Python 變量名的字符,如連字符。這也不會有問題, Django 會在後臺給列名和表名加上雙引號。
db_index
-
Field.
db_index
若是爲 True
,將會爲這個字段建立數據庫索引。
db_tablespace
-
Field.
db_tablespace
The name of the database tablespace to use for this field’s index, if this field is indexed. The default is the project’s DEFAULT_INDEX_TABLESPACE
setting, if set, or the db_tablespace
of the model, if any. If the backend doesn’t support tablespaces for indexes, this option is ignored.
default
-
Field.
default
該字段的默認值. 它能夠是一個值或者一個可調用對象。 若是是一個可調用對象,將會在建立新對象時調用。
這個默認值不能夠是一個可變對象(好比 模型實例
, 列表
, 集合
等等)。 由於對於全部模型的一個新的實例來講,它們指向同一個引用。 或者,把他們封裝爲一個可調用的對象。 例如,有一個自定義的 JSONField
,想指定一個特定的字典值,能夠這樣:
def contact_default():
return {"email": "to1@example.com"}
contact_info = JSONField("ContactInfo", default=contact_default)
lambda
表達式不能做爲 default
的參數值,由於她們沒法 被migrations序列化 。
對於將映射到模型實例的外鍵之類的字段,默認值應該是它們引用的字段的值(除非to字段設置爲pk),而不是模型實例。
對於將映射到模型實例的字段,例如 ForeignKey
。其默認值應該是他們引用的字段值( 除非to_field
設置了 pk
)而不是模型實例。
默認值會在新實例建立而且沒有給該字段提供值時使用。若是字段爲主鍵,默認值也會在設置爲 None````None
時使用。
editable
-
Field.
editable
若是設爲 False
, 這個字段將不會出如今admin或者其餘 ModelForm
中。 同時也會跳過 模型驗證 。 默認是 True
。
error_messages
-
Field.
error_messages
-
error_messages
參數用於重寫默認的錯誤提示,經過字典的key來匹配將要改變的錯誤類型。
錯誤提示的key包括 null
, blank
, invalid
, invalid_choice
, unique
, 和 unique_for_date
。 下面的 字段類型 中的 error_messages 的 keys 是不同的。
help_text
-
Field.
help_text
表單部件顯示的額外」幫助」信息。即便字段不是在表單上使用,它也頗有用。
-
注意它
不會 自動轉義HTML標籤,這樣就能夠在
-
help_text
中定義html格式:
help_text="Please use the following format: <em>YYYY-MM-DD</em>."
另外, 你可使用簡單文本和 django.utils.html.escape()
來避免任何HTML特定的字符。 請確保你所使用的help text可以避免一些不信任用戶的跨站腳本攻擊。
primary_key
-
Field.
primary_key
若是是 True
, 則該字段會成爲模型的主鍵字段。
若是模型中沒有字段設置了 primary_key=True
, Django 會自動添加一個 AutoField
字段來做爲主鍵,所以若是沒有特定須要,能夠不用設置 primary_key=True
。 更多信息,請參考 自增主鍵 。
primary_key=True
也就意味着 null=False
和 unique=True
。而且一個對象只能有一個主鍵。
主鍵字段是隻讀的,若是你修改了一條記錄主鍵的值而且保存,那麼將是建立一條新的記錄而不是修改。
unique_for_month
-
Field.
unique_for_month
和 unique_for_date
相似, 只是要求字段對於月份是惟一的。
verbose_name
-
Field.
verbose_name
爲字段設置的可讀性更高的名稱。若是用戶沒有定義改選項, Django會自動將自動建立,內容是該字段屬性名中的下劃線轉換爲空格的結果。能夠參照 Verbose field names.
validators
-
Field.
validators
該字段將要運行的一個Validator的列表。 更多信息參見 validators 文檔 。
註冊和查詢
Field
實現了 查詢註冊API 。 該API 能夠用於自定義一個字段類型的查詢,以及如何從一個字段獲取查詢。
字段類型
AutoField
-
class
django.db.models.
AutoField
(
**options
)
一個根據實際ID自動增加的 IntegerField
。 一般不須要直接使用它,若是表中沒有設置主鍵時,將會自動添加一個自增主鍵。參考 自增主鍵 。
BigAutoField
-
class
django.db.models.
BigAutoField
(
**options
)
一個64位整數, 和 AutoField
相似,不過它的範圍是 1
到 9223372036854775807
。
BigIntegerField
-
class
django.db.models.
BigIntegerField
(
**options
)
一個64位整數, 和 IntegerField
相似,不過它容許的值範圍是 -9223372036854775808
到 9223372036854775807
。這個字段默認的表單組件是一個 TextInput
.
BinaryField
-
class
django.db.models.
BinaryField
(
**options
)
這是一個用來存儲原始二進制碼的字段。支持 bytes
賦值。 注意這個字段只有頗有限的功能。 好比,不能在一個 BinaryField
值的上進行查詢過濾。 ModelForm
中也不容許包含 BinaryField
。
濫用 BinaryField
可能你想使用數據庫來存儲文件,可是99%的狀況下這都是很差的設計。 這個字段 不是 代替 靜態文件 的最佳方式。
CharField
-
class
django.db.models.
CharField
(
max_length=None,
**options
)
字符字段。
對於比較大的文本內容,請使用 TextField
類型。
這個字段的默認表單部件是 TextInput
.
CharField
字段有個額外參數:
-
CharField.
max_length
-
字段容許的最大字符串長度。這將在數據庫中和表單驗證時生效。
註解
若是你在寫一個須要導出到多個不一樣數據庫後端的應用,你須要注意某些後端對 max_length
有一些限制, 查看 數據庫後端注意事項 來獲取更多的細節。
MySQL users
若是你使用的是 MySQLdb 1.2.2 設置的是 utf8_bin
校對 (這 不是 默認項), 你必須瞭解一些問題。詳細請參考 MySQL 數據庫注意事項 。
CommaSeparatedIntegerField
-
class
django.db.models.
CommaSeparatedIntegerField
(
max_length=None,
**options
)
一個逗號分隔的整數字段。 和 CharField
同樣, max_length
是必填參數,同時再數據庫移植時也須要注意。
DateField
-
class
django.db.models.
DateField
(
auto_now=False,
auto_now_add=False,
**options
)
日期, 表現爲 Python中 datetime.date
的實例。可是有幾個額外的設置參數:
-
DateField.
auto_now
-
當保存對象時,自動設置改字段爲當前時間。好比用於字段 「修改時間」。 注意這會 始終 使用當前時間,並非一個默認值。
這個字段只會在調用 Model.save()
方法時自動更新。 更新其餘字段或使用這他更新方法時,這個字段不會更新,好比 QuerySet.update()
方法。
-
DateField.
auto_now_add
-
當字段被首次建立時被設置爲當前時間。 適用於建立日期,注意這會 始終 使用當前時間,並非一個能夠重寫的默認值。 所以就算你在建立時指定了日期,也會被忽略掉。若是你但願修改這個值,請設置如下內容,而不是 auto_now_add=True
:
這個字段的默認表單部件是 TextInput
。在admin中會添加一個JavaScript的日期插件,帶有一個 「Today」 的快捷按鈕。 也包含 invalid_date
錯誤消息。
選項 auto_now_add
, auto_now
, 和 default
是相互排斥的, 他們之間的任何組合將會發生錯誤的結果。
註解
在當前框架實現中, 設置 auto_now
或者 auto_now_add
爲 True
都會使字段同時獲得兩個設置 editable=False
和 blank=True
。
註解
auto_now
和 auto_now_add
這兩個設置會在對象建立或更新時,老是使用 default timezone 的日期。 你能夠考慮一下簡單地使用你本身的默認調用或者重寫 save()
方法來代替使用 auto_now
和 auto_now_add
;也可使用 DateTimeField
類型代替 DateField
,而後在顯示時間的時候再決定如何從 datetime 轉換到 date。
DateTimeField
-
class
django.db.models.
DateTimeField
(
auto_now=False,
auto_now_add=False,
**options
)
時間和日期, 表現爲 Python 中的 datetime.datetime
實例。 和 DateField
有相同的額外參數。
默認的表單部件是一個 TextInput
。admin頁面使用兩個帶有 JavaScript控件的 TextInput
。
DecimalField
-
class
django.db.models.
DecimalField
(
max_digits=None,
decimal_places=None,
**options
)
十進制數,表現爲Python中 Decimal
實例,有兩個 必填 參數:
-
DecimalField.
max_digits
-
容許的最大位數包括小數點後的位數。必須大於等於 decimal_places
。
-
DecimalField.
decimal_places
-
小數點後的位數。
舉個例子,要儲存最大爲 999
帶有兩位小數的數字,須要這樣設置:
models.DecimalField(..., max_digits=5, decimal_places=2)
而要存儲那些將近10億,而且要求達到小數點後十位精度的數字:
models.DecimalField(..., max_digits=19, decimal_places=10)
該字段默認的表單部件是 NumberInput
, 若是 localize
設置爲 False
則是 TextInput
。
DurationField
-
class
django.db.models.
DurationField
(
**options
)
用做存儲一段時間的字段類型 - 相似Python中的 timedelta
。.當數據庫使用的是 PostgreSQL, 該數據類型使用的是一個 interval
, 而在Oracle上,則使用的是 INTERVAL DAY(9) TO SECOND(6)
。其餘狀況使用微秒的的 bigint
。
註解
DurationField
的算數運算在多數狀況下能夠很好的工做。 然而,在除了 PostgreSQL以外的其餘數據庫中, 將 DurationField
和 DateTimeField
的實例比較則不會獲得正確的結果。
EmailField
-
class
django.db.models.
EmailField
(
max_length=254,
**options
)
一個檢查輸入的email地址是否合法的 CharField
類型。 它使用 EmailValidator
來驗證輸入合法性。
FileField
-
class
django.db.models.
FileField
(
upload_to=None,
max_length=100,
**options
)
上傳文件字段。
註解
primary_key
和 unique
在這個字段中不支持, 若是使用在拋出 TypeError
異常。
擁有兩個可選參數:
-
FileField.
upload_to
-
-
-
用於設置文件路徑和文件名, 有兩種設置方法,但都是經過 Storage.save()
方法設置。
你若是路勁包含 strftime()
格式,將被替換爲實際的 日期/時間 做爲文件路徑 (這樣上傳的文件就不會到指定的文件夾)。 例如:
class MyModel(models.Model):
# file will be uploaded to MEDIA_ROOT/uploads
upload = models.FileField(upload_to='uploads/')
# or...
# file will be saved to MEDIA_ROOT/uploads/2015/01/30
upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
若是使用了默認的 FileSystemStorage
, 這個字符串將會再添加 上 MEDIA_ROOT
路徑。若是想使用其餘儲存方法,請查看儲存文檔如何處理 upload_to
。
upload_to
也能夠是一個可調用的對象。 將調用它來獲取上傳路徑,包括文件名。 這個可調用對象必須接受兩個參數,而且返回一個Unix 風格的路徑(帶有前向/)給存儲系統。將傳遞的兩個參數爲:
Argument |
Description |
instance |
定義 FileField 的模型的實例 更準確地說,就是當前文件的所在的那個實例。 大部分狀況下,這個實例將尚未保存到數據庫中,若它用到默認的 AutoField 字段,它的主鍵字段還可能沒有值。 |
filename |
最初給文件的文件名。在肯定最終目標路徑時,可能不會考慮到這一點。 |
例如:
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)
class MyModel(models.Model):
upload = models.FileField(upload_to=user_directory_path)
-
FileField.
storage
-
一個Storage 對象,用於你的文件的存取。參見 Managing files 查看如何提供這個對象的細節。
這個字段的默認表單部件是一個 ClearableFileInput
。
在模式中使用 FileField
類型或 ImageField
(見下文) 須要以下幾步:
- 在 settings 文件中, 將Django儲存文件的的完整路徑設置到
MEDIA_ROOT
項。 (從性能上考慮,不要將這些文件存在數據庫中) 定義一個 MEDIA_URL
做爲基礎目錄的URL。確保web server帳戶對這個目錄有讀寫權限。
- 添加
FileField
或者 ImageField
到模型中, 定義 屬性 upload_to
用來存放上傳的文件,應該是MEDIA_ROOT
的子目錄。
- 數據庫中存放的僅是這個文件的路徑 (相對於
MEDIA_ROOT
)。 而後使用 url
屬性 來獲取。例如, 一個叫作 mug_shot
的 ImageField
字段,可使用 {{ object.mug_shot.url }}
來獲取它的絕對路徑。
假如, 你將 MEDIA_ROOT
設置爲 '/home/media'
, upload_to
屬性設置爲 'photos/%Y/%m/%d'
。 upload_to
的 '%Y/%m/%d'
部分是 strftime()
的格式化字符。 '%Y'
表示四位數的年份, '%m'
表示兩位數的月份, '%d'
表示兩位數的日份。 若是文件上傳時間是 Jan. 15, 2007,將被存到目錄 /home/media/photos/2007/01/15
。
若是想要知道上傳文件的磁盤文件名或文件大小, 可使用 name
和 size
屬性獲得;關於更多支持的方法和屬性。請參考 File
的參考文檔 Managing files 。
註解
文件做爲模型存儲在數據庫中的一部分,磁盤上文件名在模型保存完畢以前是不可靠的。
上傳的文件對應的URL能夠經過使用 url
屬性得到. 其實在內部,是調用 Storage
類的 url()
方法。
值得注意的是,不管任什麼時候候處理上傳文件時,都應該密切關注文件將被上傳到哪裏,上傳的文件類型,以免安全漏洞。 檢查全部上傳文件 確保上傳的文件是被容許的文件。 例如,若是你盲目的容許其餘人在無需認證的狀況下上傳文件至你的web服務器的root目錄中, 那麼別人能夠上傳一個CGI或者PHP腳本而後經過訪問一個你網站的URL來執行這個腳本。 因此,不要容許這種事情發生。
甚至是上傳HTML文件也須要注意,它能夠經過瀏覽器(雖然不是服務器)執行,也能夠引起至關因而XSS或者CSRF攻擊的安全威脅。
FileField
對象在數據庫中以最大長度100個字節的 varchar
類型存在。 和普通字段同樣。也可使用 max_length
參數限制。
FileField
和 FieldFile
-
class
django.db.models.fields.files.
FieldFile
當添加一個 FileField
字段到模型中時,其實是一個 FieldFile
實例做爲將要訪問文件的代理。
The API of FieldFile
mirrors that of File
, with one key difference: The object wrapped by the class is not necessarily a wrapper around Python’s built-in file object. Instead, it is a wrapper around the result of the Storage.open()
method, which may be a File
object, or it may be a custom storage’s implementation of the File
API.
In addition to the API inherited from File
such as read()
and write()
, FieldFile
includes several methods that can be used to interact with the underlying file:
警告
Two methods of this class, save()
and delete()
, default to saving the model object of the associated FieldFile
in the database.
-
FieldFile.
name
文件的名稱,Storage
的根路徑, FileField
的相對路徑。
-
FieldFile.
size
下面 Storage.size()
方法的返回結果。
-
FieldFile.
url
經過下面 Storage
類的 url()
方法只讀地訪問文件的URL。
-
FieldFile.
open
(
mode='rb'
)
在指定 模式 下打開或重寫與該實例相關聯的文件,和Python的標準 open()
方法不一樣的是,它不返回文件描述符。
因爲底層文件在訪問它時隱式地打開,所以調用此方法可能沒有必要,除非將指針重置到底層文件或更改 模式。
-
FieldFile.
close
(
)
相似Python的 file.close()
方法,關閉相關文件。
-
FieldFile.
save
(
name,
content,
save=True
)
這個方法會將文件名以及文件內容傳遞到字段的storage類中,並將模型字段與保存好的文件關聯。 I 若是想要手動關聯文件數據到你的模型中的 FileField
實例, 則 save()
方法老是用來保存該數據。
方法接受兩個必選參數: name
文件名, 和 content
文件內容。 可選參數 save
控制模型實例在關聯的文件被修改時是否保存,默認爲 True
。
須要注意的是 content
參數必須是 django.core.files.File
的實例, 不是Python內建的文件對象。 你能夠用以下方法從一個已經存在的Python文件對象來構建 File
:
from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)
或者,你能夠像下面的同樣從一個python字符串中構建:
from django.core.files.base import
ContentFile myfile = ContentFile("hello world")
其餘更多信息, 參見 Managing files.
-
FieldFile.
delete
(
save=True
)
刪除與此實例關聯的文件,並清除該字段的全部屬性。 注意:若是在調用 delete()
時有打開操做,該方法將關閉該文件。
save
控制模型實例在關聯的文件被修改時是否保存,默認爲 True
。
注意,model刪除的時候,與之關聯的文件並不會被刪除。若是你要把文件也清理掉,你須要本身處理
FilePathField
-
class
django.db.models.
FilePathField
(
path=None,
match=None,
recursive=False,
max_length=100,
**options
)
一個 CharField
內容只限於文件系統內特定目錄下的文件名,有幾個特殊參數, 其中第一個是 必須的:
-
FilePathField.
path
-
必傳。 FilePathField
應該獲得的選擇目錄的絕對文件系統路徑。例如: "/home/images"
.
-
FilePathField.
match
-
可選。 一個字符串形式的正則表達式。FilePathField
使用其過濾文件名。 regex將應用於基本文件名,而不是所有路徑。例如:"foo.*\.txt$"
將會匹配到 foo23.txt
但不會匹配到 bar.txt
或 foo23.png
。
-
FilePathField.
recursive
-
可選。 只能是 True
或者 False
。默認爲 False
。聲明是否包含全部子目錄的 path
。
-
FilePathField.
allow_files
-
可選。 只能是 True
或者 False
。默認爲 True
。 聲明是否包含指定位置的文件 該參數和allow_folders
必須有一個爲 True
。
-
FilePathField.
allow_folders
-
可選。 只能是 True
或者 False
。默認爲 False
。 聲明是否包含指定位置的文件夾。 該參數 和 allow_files
必須有一個爲 True
。
固然,這些參數能夠同時使用。
有一點須要提醒的是 match
只匹配基本文件名, 而不是整個文件路徑,例如:
FilePathField(path="/home/images", match="foo.*", recursive=True)
…將會匹配 /home/images/foo.png
但不會匹配 /home/images/foo/bar.png
由於 match
只做用於基本文件名 (foo.png
和 bar.png
)。
FilePathField
再數據庫中以 varchar
類型存在 默認最大長度爲 100 個字節。和普通一段同樣,可使用 max_length
參數修改長度限制。
FloatField
-
class
django.db.models.
FloatField
(
**options
)
用Python的一個 float
實例來表示一個浮點數。
若是屬性 localize
爲 False
則默認表單部件是一個 NumberInput
, 不然是一個 TextInput
。
FloatField
vs. DecimalField
有時候 FloatField
類可能會和 DecimalField
類產生混淆。雖然它們表示都表示實數,可是兩者表示數字的方式不同。 FloatField
使用Python內部的 float
類型,而 DecimalField
使用的是Python的 Decimal
類型。 想要了解更多兩者的差異, 能夠查看Python文檔中的 decimal
模塊。
ImageField
-
class
django.db.models.
ImageField
(
upload_to=None,
height_field=None,
width_field=None,
max_length=100,
**options
)
繼承了:class:FileField 類的全部方法和屬性,並且還對上傳的對象進行校驗,確保它是個有效的image。
除了從 FileField
繼承的屬性外, ImageField
類還增長了 height
和 width
屬性。
爲了更便捷的去用這些屬性值, ImageField
有兩個額外的可選參數:
-
ImageField.
height_field
-
該屬性的設定會在模型實例保存時,自動填充圖片的高度。
-
ImageField.
width_field
-
該屬性的設定會在模型實例保存時,自動填充圖片的寬度。
ImageField須要 Pillow 庫支持。
ImageField
實例在數據庫中以 varchar
類型存在,默認最大長度爲100個字節, 和普通字段同樣。也可使用 max_length
參數限制。
該字段默認的表單部件是一個 ClearableFileInput
。
IntegerField
-
class
django.db.models.
IntegerField
(
**options
)
一個整數。在Django全部支持的數據庫中,-2147483648
到 2147483647
範圍纔是合法的。 若是設置了 localize
爲 False
,那麼默認表單部件將是一個 NumberInput
不然是一個 TextInput
。
GenericIPAddressField
-
class
django.db.models.
GenericIPAddressField
(
protocol='both',
unpack_ipv4=False,
**options
)
一條IPv4或IPv6地址, 字符串格式是 (e.g. 192.0.2.30
或者 2a02:42fe::4
)。 默認的表單部件是TextInput
.
IPv6地址規範遵循 RFC 4291#section-2.2 2.2 章節, 包括使用該部分第3段中建議的IPv4格式, 如::ffff:192.0.2.0
。 例如, 2001:0::0:01
將被轉換成 2001::1
, ::ffff:0a0a:0a0a
轉換成 ::ffff:10.10.10.10
。全部字符都轉換爲小寫。
-
GenericIPAddressField.
protocol
-
限制指定協議的有效輸入。接受的值爲 'both'
(默認), 'IPv4'
或 'IPv6'
。匹配不區分大小寫。
-
GenericIPAddressField.
unpack_ipv4
-
解析IPv4映射地址如 ::ffff:192.0.2.1
. 若是啓用該選項,則地址將被解析到 192.0.2.1
。默認是禁用。只有當 protocol
設置爲 'both'
時纔可使用。
若是容許空值,則必須容許null值,由於空值存儲爲null。
PositiveIntegerField
-
class
django.db.models.
PositiveIntegerField
(
**options
)
相似 IntegerField
類型, 但必須是整數或者零 (0
)。 取值範圍是 0
到 2147483647
。 容許 0
是爲了向後兼容。
PositiveSmallIntegerField
-
class
django.db.models.
PositiveSmallIntegerField
(
**options
)
相似 PositiveIntegerField
類型, 但其容許的值必須小於某個特定值 (有數據庫決定)。在Django所支持的數據庫中 0
到 32767
內的值是絕對容許的。
SlugField
-
class
django.db.models.
SlugField
(
max_length=50,
**options
)
Slug 是一個新聞術語, 一般叫作短標題。slug只能包含字母、數字、下劃線或者是連字符。一般它們是用來放在URL裏的。
相似 CharField 類型, 能夠指定 max_length
(請參閱該部分中的有關數據庫可移植性的說明和max_length
) 若是沒有指定 max_length
屬性,將默認使用50。
同時 Field.db_index
設置爲 True
。
比較可行的作法是根據其餘值的內容自動預填 SlugField 的值。 在admin中可使用prepopulated_fields
來實現。
-
SlugField.
allow_unicode
-
若是設置爲 True
, 該字段除了ASCII以外,還接受Unicode字母。默認爲 False
.
SmallIntegerField
-
class
django.db.models.
SmallIntegerField
(
**options
)
相似 IntegerField
, 但只容許某些特定的值 (數據庫決定)。 在Django所支持的數據庫中 -32768
到 32767
以前是絕對容許的。
TextField
-
class
django.db.models.
TextField
(
**options
)
大文本字段。默認的表單部件是一個 Textarea
。
若是指定了 max_length
屬性, 它將會在渲染頁面時表單部件 Textarea
中體現出來,可是卻不會在模型和數據庫中有這個限制。 若是須要這樣清使用 CharField
類型。
MySQL 用戶
若是在 MySQLdb 1.2.1p2 中使用該字段,而且是 utf8_bin
排序規則(默認*不是* 這個) 則須要注意幾個問題。參考 MySQL database notes 。
TimeField
-
class
django.db.models.
TimeField
(
auto_now=False,
auto_now_add=False,
**options
)
時間字段, 相似於Python datetime.time
實例. 和 DateField
具備相同的選項.
默認的表單部件是一個 TextInput
. 在Admin中添加了一些JavaScript快捷方式。
UUIDField
-
class
django.db.models.
UUIDField
(
**options
)
一個用於存儲惟一標識符的字段. 使用 Python 的 UUID
類. 若是使用 PostgreSQL, 將使用 uuid
數據類型儲存, 其餘狀況是一個 char(32)
.
唯一的標識符是很好用來替代 AutoField
類型 primary_key
的方法. 數據庫不會自動生成UUID值, 因此最好使用 default
參數:
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields
注意傳入的是一個可調用的對象(即一個省略括號的方法) 而不是傳入一個 UUID
實例給 default
.