在Django中,定義了一些Field來與數據庫表中的字段類型來進行映射。如下將介紹那些經常使用的字段類型。javascript
映射到數據庫中是int類型,能夠有自動增加的特性。通常不須要使用這個類型,若是不指定主鍵,那麼模型會自動的生成一個叫作id的自動增加的主鍵。若是你想指定一個其餘名字的而且具備自動增加的主鍵,使用AutoField也是能夠的。html
64位的整形,相似於AutoField,只不過是產生的數據的範圍是從1-9223372036854775807。java
在模型層面接收的是True/False。在數據庫層面是tinyint類型。若是沒有指定默認值,默認值是None。python
在數據庫層面是varchar類型。在Python層面就是普通的字符串。這個類型在使用的時候必需要指定最大的長度,也即必需要傳遞max_length這個關鍵字參數進去。ios
專門用來處理時區的庫。這個庫會常常更新一些時區的數據,不須要咱們擔憂。而且這個庫在安裝Django的時候會默認的安裝。若是沒有安裝,那麼能夠經過pip install pytz
的方式進行安裝。django
將一個時區的時間轉換爲另一個時區的時間。這個方法只能被aware
類型的時間調用。不能被navie
類型的時間調用。
示例代碼以下:markdown
import pytz from datetime import datetime now = datetime.now() # 這是一個navie類型的時間 utc_timezone = pytz.timezone("UTC") # 定義UTC的時區對象 utc_now = now.astimezone(utc_timezone) # 將當前的時間轉換爲UTC時區的時間 >> ValueError: astimezone() cannot be applied to a naive datetime # 會拋出一個異常,緣由就是由於navie類型的時間不能調用astimezone方法 now = now.replace(tzinfo=pytz.timezone('Asia/Shanghai')) utc_now = now.astimezone(utc_timezone) # 這時候就能夠正確的轉換。
能夠將一個時間的某些屬性進行更改。
會根據settings.py
中是否設置了USE_TZ=True
獲取當前的時間。若是設置了,那麼就獲取一個aware
類型的UTC
時間。若是沒有設置,那麼就會獲取一個navie
類型的時間。
django.utils.timezone.localtime方法:
會根據setting.py
中的TIME_ZONE
來將一個aware
類型的時間轉換爲TIME_ZONE
指定時區的時間。
https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/
日期類型。在Python
中是datetime.date
類型,能夠記錄年月日。在映射到數據庫中也是date
類型。使用這個Field
能夠傳遞如下幾個參數:
1. auto_now
:在每次這個數據保存的時候,都使用當前的時間。好比做爲一個記錄修改日期的字段,能夠將這個屬性設置爲True
。
2. auto_now_add
:在每次數據第一次被添加進去的時候,都使用當前的時間。好比做爲一個記錄第一次入庫的字段,能夠將這個屬性設置爲True
。
日期時間類型,相似於DateField
。不單單能夠存儲日期,還能夠存儲時間。映射到數據庫中是datetime
類型。這個Field
也能夠使用auto_now
和auto_now_add
兩個屬性。
時間類型。在數據庫中是time
類型。在Python
中是datetime.time
類型。
相似於CharField
。在數據庫底層也是一個varchar
類型。最大長度是254個字符。
用來存儲文件的。這個請參考後面的文件上傳章節部分。
用來存儲圖片文件的。這個請參考後面的圖片上傳章節部分。
浮點類型。映射到數據庫中是float
類型。
整形。值的區間是-2147483648——2147483647
。
大整形。值的區間是-9223372036854775808——9223372036854775807
。
正整形。值的區間是0——2147483647
。
小整形。值的區間是-32768——32767
。
正小整形。值的區間是0——32767
。
大量的文本類型。映射到數據庫中是longtext類型。
只能存儲uuid
格式的字符串。uuid
是一個32位的全球惟一的字符串,通常用來做爲主鍵。
相似於CharField
,只不過只能用來存儲url
格式的字符串。而且默認的max_length
是200。
若是設置爲True
,Django
將會在映射表的時候指定是否爲空。默認是爲False
。在使用字符串相關的Field
(CharField/TextField)的時候,官方推薦儘可能不要使用這個參數,也就是保持默認值False
。由於Django
在處理字符串相關的Field
的時候,即便這個Field
的null=False
,若是你沒有給這個Field
傳遞任何值,那麼Django
也會使用一個空的字符串""
來做爲默認值存儲進去。所以若是再使用null=True
,Django
會產生兩種空值的情形(NULL或者空字符串)。若是想要在表單驗證的時候容許這個字符串爲空,那麼建議使用blank=True
。若是你的Field
是BooleanField
,那麼對應的可空的字段則爲NullBooleanField
。
標識這個字段在表單驗證的時候是否能夠爲空。默認是False
。
這個和null
是有區別的,null
是一個純數據庫級別的。而blank
是表單驗證級別的。
這個字段在數據庫中的名字。若是沒有設置這個參數,那麼將會使用模型中屬性的名字。
默認值。能夠爲一個值,或者是一個函數,可是不支持lambda
表達式。而且不支持列表/字典/集合等可變的數據結構。
是否爲主鍵。默認是False
。
在表中這個字段的值是否惟一。通常是設置手機號碼/郵箱等。
更多Field
參數請參考官方文檔:https://docs.djangoproject.com/zh-hans/2.0/ref/models/fields/