Django2.0-db(3)-模型常用欄位, navie和aware時間
阿新 • • 發佈:2018-12-20
模型常用欄位
常用欄位
Django
中,定義了一些Field
來與資料庫表中的欄位型別來進行對映。
AutoField
對映到資料庫中的是int
型別,可以有自動增長的特性。
如果不指定主鍵,模型會自動生成一個叫做 id
的自動增長模型。
該field
可以指定名字
BigAutoField
64位的整型,對應資料庫的 bigInt
,類似 AutoField
,不過產生的資料的範圍是從 1~9223372036854775807
BooleanField
在模型層面接收 True
或者 False
。對應資料庫的 tinyint
. 如果沒有指定預設值,預設值是 None
預設null=False
NullBooleaField
如果要指定null=True
,使用NullBooleanField代替。
CharField
對應資料庫的 varchar
。 在python層面是普通的字串
必須指定最大的長度(max_length)
如果超過254個字元,不建議使用,而是使用TextFile
DateField
日期型別。python中的datetime
。 對應資料庫的date
可以傳遞以下幾個引數:
auto_now
:在每次這個資料儲存(save()
)的時候,都使用當前的時間。型別為True
orFalse
可用於記錄修改日期。auto_now_add
:在每次資料第一次被新增進去的時候,都使用當前的時間。型別為True
False
。可用於記錄第一次入庫的時間。
DateTimeField
日期時間型別。可以儲存日期和時間。對應資料庫中的datetime
型別。
同樣也有auto_now
和auto_now_add
屬性
TimeField
時間型別。對應資料庫的time
。在python中是datetime.time
型別
EmailField
- 類似於
CharField
.在資料庫底層也是一個varchar
型別。預設長度是254個字元。- 在資料庫層面無限制。但是在
ModelForm
等表單相關操作的時候會起作用
- 在資料庫層面無限制。但是在
FiledField
- 用來儲存檔案的
ImageField
- 用來儲存圖片檔案的。
FloatFiled
- 浮點型別。對應資料庫的
float
IntegerField
- 整型。區間是(-231) ~ 232 -1
BigIntegerField
- 大整型。區間是 (-263) ~ 263 -1
PositiveIntegerField
- 正整型。區間是 0 ~ 263 -1
SmallIntegerField
- 小整型。區間是 (-215) ~ 215 -1
PositiveSmallIntegerField
- 正小整型。區間是 0 ~ 215 -1
TextField
- 大量的文字型別。 對應資料庫的
longtext
UUIDField
- 只能儲存
uuid
格式的字串。uuid
是一個32位的全球唯一的字串。一般用來作為主鍵。
URLField
- 類似
Charfield
,只能用於儲存url
格式的字串。預設的max_length
為200
navie時間和aware時間
- navie時間: 幼稚。不知道自己的時間表示的是哪個時區。
- aware時間:清醒的。知道自己的時間表示的是哪個時區。
pytz庫:
- 專門用來處理時區的庫。這個庫會經常更新一些時區的資料。安裝
Django
預設安裝。
astimezone方法
-
將一個時區的時間轉換為另外一個時區的時間。
-
只能被
aware
型別的時間呼叫。不能被navie
類的時間呼叫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 navie datetime # 丟擲一個異常。navie型別的時間不能呼叫astimezone方法 now = now.replace(tzinfo=pytz.timezone('Asia/Shanghai')) # 修改屬性,變成一個aware時間型別 utc_now = now.astimezone(utc_timezone) # 就可以正確呼叫astimezone()
replace方法
- 可以將一個時間的某些屬性進行更改
django.utils.timezone.now
-
在
settings.py
中,如果USE_TZ = True
,則now()
返回aware
型別的UTC
時間.如果沒有設定,則返回navie
型別的時間。from django.utils.timezone import now # 要用到話這樣import即可 now()
django.utils.timezone.localtime
-
根據
setting.py
中的TIME_ZONE
來將一個aware
型別的時間轉換為TIME_ZONE
指定時區的時間。from django.utils.timezone import localtime # 要用到話這樣import即可 target_time = localtime(aware_time)