Django文檔——Model欄位類型(FieldTypes)

來源:互聯網
上載者:User
欄位類型(Field types)

AutoField

它是一個根據 ID 自增長的 IntegerField 欄位。通常,你不必直接使用該欄位。如果你沒在別的欄位上指定主 鍵,Django 就會自動添加主鍵欄位。

BigIntegerField

64位整數,類似於IntegerField,範圍從-9223372036854775808 到9223372036854775807。預設的form widget 是TextInput。

BooleanField

一個布爾值(true/false)欄位。

預設的form widget是CheckboxInput。

如果要使用null作為空白值,可使用NullBooleanField。

CharField

class CharField(max_length=None[, **options])

它是一個字串欄位,對小字串和大字串都適用。

對於更大的文本,應該使用TextField 。

預設的form widget是TextInput。

CharField 有一個必須傳入的參數:max_length,欄位的最大字元數。它作用於資料庫層級和 Django 的資料驗證層級。

CommaSeparatedInterField

class CommaSeparatedIntegerField(max_length=None[, **options])

它用來存放以逗號間隔的整數序列。和 CharField 一樣,必須為它提供 max_length 參數。而且要注意不同資料庫對 max_length 的限制。

DateField

class DateField([auto_now=False, auto_now_add=False, **options])

該欄位利用 Python 的 datetime.date 執行個體來表示日期。下面是它額外的選擇性參數:

DateField.auto_now:每一次儲存對象時,Django 都會自動將該欄位的值設定為目前時間。一般用來表示 "最後修改" 時間。要注意使用的是當前日期,而並非預設值,所以

不能通過重寫預設值的辦法來改變儲存時間。

DateField.auto_now_add:在第一次建立對象時,Django 自動將該欄位的值設定為目前時間,一般用來表示對象建立時間。它使用的同樣是當前日期,而非預設值。

預設的form widget是TextInput。

Note:當auto_now或者auto_now_add設定為True時,欄位會有editable=True和blank=True的設定。

DateTimeField

class DateTimeField([auto_now=False, auto_now_add=False, **options])

該欄位利用 datetime.datetime 執行個體表示日期和時間。該欄位所按受的參數和 DateField 一樣。

預設的form widget是TextInput。Django 的admin使用兩個帶有 javaScript 快捷選項TextInput分別表示日期和時間。

DecimalField

class DecimalField(max_digits=None, decimal_places=None[, **options])

它是使用 Decimal 執行個體表示固定精度的十進位數的欄位。它有兩個必須的參數:

DecimalField.max_digits:數字允許的最大位元

DecimalField.decimal_places:小數的最大位元

例如,要儲存的數字最大值是999,而帶有兩個小數位,你可以使用:

models.DecimalField(..., max_digits=5, decimal_places=2)

要儲存大約是十億級且帶有10個小數位的數字,就這樣寫:

models.DecimalField(..., max_digits=19, decimal_places=10)

預設的form widget是TextInput。

EmailField

class EmailField([max_length=75, **options])

它是帶有 email 合法性檢測的A CharField 。

Note:最大長度預設為75,並不能儲存所有與RFC3696/5321相容的email地址。如果要儲存所有,請設定

max_length=254。設定為75是曆史遺留問題。

FileField

class FileField(upload_to=None[, max_length=100, **options])

檔案上傳欄位

Note:該欄位不支援 PRimary_key 和 unique 參數,否則會拋出 TypeError 異常。

它有一個必須的參數:

FileField.upload_to

用於儲存檔案的本地檔案系統。它根據 MEDIA_ROOT 設定確定該檔案的 url 屬性。

該路徑可以包含 時間格式串strftime(),可以在上傳檔案的時候替換成當時日期/時間(這樣,就不會出現在上傳檔案把某個目錄塞滿的情況了)。

該參數也可以是一個可調用項,比如是一個函數,可以調用函數獲得包含檔案名稱的上傳路徑。這個可調用項必須要接受兩個參數,

並且返回一個儲存檔案用的 Unix-Style 的路徑(用 / 斜杠)。兩個參數分別是:

instance :定義了當前 FileField 的 model 執行個體。更準確地說,就是以該檔案為附件的 model 執行個體。

大多數情況下,在儲存該檔案時, model 執行個體對象還並沒有儲存到資料庫,這是因為它很有可能使用預設的 AutoField,而此時它還沒有從資料庫中獲得主索引值。

filename :上傳檔案的原始名稱。在產生最終路徑的時候,有可能會用到它。

還有一個可選的參數:

FileField.storage

負責儲存和擷取檔案的對象。

預設的form widget是FileInput。

Note:在 model 中使用 FileField 或 ImageField 要按照以下的步驟:

1.在項目settings檔案中,你要定義 MEDIA_ROOT ,將它的值設為用來存放上傳檔案的目錄的完整路徑。(基於效能的考慮,Django 沒有將檔案儲存在資料庫中).

然後定義 MEDIA_URL ,將它的值設為表示該目錄的網址。

要確保 網頁伺服器所用的帳號擁有對該目錄的寫入權限。

2.在 model 裡面添加 FileField 或 ImageField ,並且確認已定義了 upload_to 項,讓 Django 知道應該用

MEDIA_ROOT 的哪個子目錄來儲存檔案。

3.儲存在資料庫當中的僅僅只是檔案的路徑(而且是相對於 MEDIA_ROOT 的相對路徑)。你可能已經想到利用

Django 提供的 url 這個方便的屬性。舉個例子,如果你的 ImageField 名稱是 mug_shot,那麼你可以在模板

中使用

{{ object.mug_shot.url }}

就能得到圖片的完整網址。

例如,假設你的 MEDIA_ROOT 被設為 '/home/media',upload_to 被設為 'photos/%Y/%m/%d'。 upload_to 中

的 '%Y/%m/%d' 是一個strftime(), '%Y' 是四位的年份,'%m' 是兩位的月份, '%d' 是兩位的日子。如果你

在2007年01月15號上傳了一個檔案,那麼這個檔案就儲存在 /home/media/photos/2007/01/15 目錄下。

如果你想得到上傳檔案的本地檔案名稱,檔案網址,或是檔案的大小,你可以使用 name, url 和 size 屬性。

Note:在上傳檔案時,要警惕儲存檔案的位置和檔案的類型,這麼做的原因是為了避免安全性漏洞。對每一個上傳

檔案都要驗證,這樣你才能確保上傳的檔案是你想要的檔案。舉個例子,如果你盲目地讓別人上傳檔案,而沒有

對上傳檔案進行驗證,如果儲存檔案的目錄處於 網頁伺服器的根目錄下,萬一有人上傳了一個 CGI 或是 php

指令碼,然後通過訪問指令碼網址來運行上傳的指令碼,那可就太危險了。千萬不要讓這樣的事情發生!

預設情況下,FileField 執行個體在資料庫中的對應列是 varchar(100) ,和其他欄位一樣,你可以利用max_length 參數改變欄位的最大長度。

FileField and FieldFile

class FieldFile

當你訪問一個Model的FileField

欄位時,會得到一個FieldFile的執行個體作為代理去訪問底層檔案。執行個體有幾種屬性和方法可以用來和檔案資料進行互動。

FieldFile.url

通過唯讀方式調用底層儲存(Storage)類的 url() 方法,來訪問該檔案的相對URL。

FieldFile.open(mode='rb')

類似於python的open()方法。

FieldFile.close()

類似於python的close()方法。

FieldFile.save(name,content,save=True)

這種方法將filename和檔案內容傳遞到該欄位然後儲存到該模型。該方法需要兩個必須的參數:name, 檔案的名稱, content, 包含檔案內容的對象。save 參數是可選的,主

要是控制檔案修改後執行個體是否儲存。預設是 True 。需要注意的是,content 參數是 django.core.files.File 的一個執行個體,不是Python的內建File對象。你可以使

用他從現有的Python檔案對象中構建一個檔案,如下所示:

from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/tmp/hello.world')
myfile = File(f)

或者從字串中構造:

from django.core.files.base import ContentFile
myfile = ContentFile("hello world")

FieldFile.delete(save=True)

刪除此執行個體相關的檔案,並清除該欄位的所有屬性。

Note:當delete()被調用時,如果檔案正好是開啟的,該方法將關閉檔案。

save 參數是可選的,控制檔案刪除後執行個體是否儲存。預設是 True 。

需要注意的是,當一個模型被刪除時,相關檔案不被刪除。如果想刪除這些孤立的檔案,需要自己去處理(比如,可以手動運行命令清理,也可以通過cron來定期執行清理命令)

FilePathField

class FilePathField(path=None[, match=None, recursive=False, max_length=100, **options])

它是一個 CharField ,它用來選擇檔案系統下某個目錄裡面的某些檔案。它有三個專有的參數,只有第一個參

數是必須的:

FilePathField.path

這個參數是必需的。它是一個目錄的絕對路徑,而這個目錄就是 FilePathField 用來選擇檔案的那個目錄。比

如: "/home/images".

FilePathField.match

選擇性參數。它是一個Regex字串, FilePathField 用它來過濾檔案名稱,只有合格檔案才出現在

檔案挑選清單中。要注意Regex只匹配檔案名稱,而不是匹配檔案路徑。例如:"foo.*\.txt$" 只匹配名為

foo23.txt 而不匹配 bar.txt 和 foo23.gif。

FilePathField.recursive

選擇性參數。它的值是 True 或 False。預設值是 False。它指定是否包含 path 下的子目錄。

FilePathField.allow_files

該項屬於Django1.5新增內容。選擇性參數,它的值是 True 或 False。預設值是 True。它指定是否包含指定位置的檔案。該項與allow_folders 必須有一個是 True。

FilePathField.allow_folders

Django1.5新增內容。選擇性參數,它的值是True或False。預設是False。它指定是否包含指定位置的目錄。該項與allow_files必須有一個是 True。

前面已經提到了 match 只匹配檔案名稱,而不是檔案路徑。所以下面這個例子:

FilePathField(path="/home/images", match="foo.*", recursive=True)

將匹配 /home/images/foo.gif ,而不匹配 /home/images/foo/bar.gif。這是因為 match 只匹配檔案名稱
(foo.gif 和 bar.gif).

預設情況下, FilePathField 執行個體在資料庫中的對應列是varchar(100) 。和其他欄位一樣,你可以利用 max_length 參數改變欄位的最大長度。

FloatField

class FloatField([**options])

該欄位在 Python 中使用float 執行個體來表示一個浮點數。

預設的form widget是TextInput。

請注意FloatField與DecimalField的區別。

ImageField

class ImageField(upload_to=None[, height_field=None, width_field=None, max_length=100,**options])

和 FileField 一樣,只是會驗證上傳對象是不是一個合法的圖象檔案。

除了那些在 FileField 中有效參數之外, ImageField 還可以使用 File.height and File.width 兩個屬性 。

它有兩個選擇性參數:

ImageField.height_field

儲存圖片高度的欄位名稱。在儲存對象時,會根據該欄位設定的高度,對圖片檔案進行縮放轉換。

ImageField.width_field

儲存圖片寬度的欄位名稱。在儲存對象時,會根據該欄位設定的寬度,對圖片檔案進行縮放轉換。

預設情況下, ImageField 執行個體對應著資料庫中的varchar(100) 列。和其他欄位一樣,你可以使 用 max_length 參數來改變欄位的最大長度。

IntegerField

class IntegerField([**options])

整數欄位。預設的form widget是TextInput。

IPAddressField

class IPAddressField([**options])

以字串形式(比如 "192.0.2.30")表示 IP 位址欄位。預設的form widget是TextInput。

GenericIPAddressField

class GenericIPAddressField([**options])

Django1.4新增。

以字串形式(比如 "192.0.2.30"或者"2a02:42fe::4")表示 IP4或者IP6 地址欄位。預設的form widget是TextInput。

IPv6的地址格式遵循RFC 4291 section 2.2。比如如果這個地址實際上是IPv4的地址,後32位可以用10進位數表示,例如 "::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’ 時才可以啟用。

NullBooleanField

class NullBooleanField([**options])

與 BooleanField 相似,但多了一個 NULL 選項。建議用該欄位代替使用 null=True 選項的 BooleanField 。

預設的form widget是NullBooleanSelect。

PositiveIntegerField

class PositiveIntegerField([**options])

和 IntegerField 相似,但欄位值必須是非負數。

PositiveSmallIntegerField

class PositiveSmallIntegerField([**options])

和 PositiveIntegerField 類似,但數值的取值範圍較小,受限於資料庫設定。

SlugField

class SlugField([max_length=50, **options])

Slug 是一個新聞術語,是指某個事件的短標籤。它只能由字母,數字,底線或連字號組成。通賞情況下,它被用做網址的一部分。

和 CharField 類似,你可以指定 max_length (要注意資料庫相容性和本節提到的 max_length )。如果沒有指定 max_length ,Django 會預設欄位長度為50。

該欄位會自動化佈建 Field.db_index to True。

基於其他欄位的值來自動填滿 Slug 欄位是很有用的。你可以在 Django 的管理後台中使用prepopulated_fields 來做到這一點。

SmallIntegerField

class SmallIntegerField([**options])

和 IntegerField 類似,但數值的取值範圍較小,受限於資料庫的限制。

TextField

class TextField([**options])

大文字欄位。預設的form widget是Textarea。

TimeField

class TimeField([auto_now=False, auto_now_add=False, **options])

該欄位使用 Python 的 datetime.time 執行個體來表示時間。它和 DateField 接受同樣的自動填滿的參數。

預設的form widget是TextInput。

URLField

class URLField([max_length=200, **options])

儲存 URL 的 CharField 。

和所有 CharField 子類一樣,URLField 接受可選的 max_length 參數,該參數預設值是200。

以上就是Django文檔——Model欄位類型(FieldTypes)的內容,更多相關文章請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.