前言
我們在admin后台發布一篇文章的時候,一般會有創建時間和最后更新時間這2個字段,創建時間就是第一次編輯文章的時候自動添加的,最后更新時間就是每次修改文章的內容后自動更新
在models.py建表的時候,設置creat_time和update_time類型為DateTimeField,添加auto_now_add和auto_now參數
DateTimeField
創建django的model時,有DateTimeField、DateField和TimeField三種類型可以用來創建日期字段,其值分別對應着datetime()、date()、time()三中對象。這三個field有着相同的參數auto_now和auto_now_add
auto_now_add 默認值為false
這個參數的默認值為False,設置為True時,會在model對象第一次被創建時,將字段的值設置為創建時的時間,以后修改對象時,字段的值不會再更新。
該屬性通常被用在存儲“創建時間”的場景下。與auto_now類似,auto_now_add也具有強制性,一旦被設置為True,就無法在程序中手動為字段賦值,在admin中字段也會成為只讀的。
auto_now 默認值為false
這個參數的默認值為false,設置為true時,能夠在保存該字段時,將其值設置為當前時間,並且每次修改model,都會自動更新。因此這個參數在需要存儲“最后修改時間”的場景下,十分方便。
需要注意的是,設置該參數為true時,並不簡單地意味着字段的默認值為當前時間,而是指字段會被“強制”更新到當前時間,你無法程序中手動為字段賦值;
如果使用django自帶的admin管理器,那么該字段在admin中是只讀的。
在models.py下新建一個Article類,添加tile、body、auth、create_time、update_time字段。CharField是字符串類型,必須要有max_length參數,當正文的文本內容很多時,需使用TextField
class Article(models.Model):
'''文章'''
title = models.CharField(max_length=30) # 標題
body = models.TextField() # 正文
auth = models.CharField(max_length=10) # 作者
# 創建時間
create_time = models.DateTimeField(auto_now_add=True)
# 最后更新時間
update_time = models.DateTimeField(auto_now=True)
def __str__(self):
return self.__doc__ + "title->" + self.title
當auto_now和auto_now_add被設置為True后,會導致其字段屬性editable=False和blank=True的狀態。editable=False將導致字段不會被呈現在admin中,blank=Ture表示允許在表單中不輸入值
admin.py注冊表
在admin.py添加注冊表的信息,然后執行下面兩句,同步數據庫
python manage.py makemigrations
python manage.py migrate
class ControlArticle(admin.ModelAdmin):
# 顯示的字段
list_display = ('title', 'body', 'auth', 'create_time', 'update_time')
# 搜索條件
search_fields = ('title',)
# 注冊Article表
admin.site.register(models.Article, ControlArticle)
amdin后台
打開admin后台,新增一條記錄
編輯標題、正文、作者之后保存
列表頁面顯示結果如下,如果重新編輯的話,最后更新時間也會更新
如果獲取的當前時間顯示和我們的時間相差八個小時,需要在setting.py設置 TIME_ZONE = 'Asia/Shanghai' ,參考前面的一篇https://www.cnblogs.com/yoyoketang/p/10342696.html
TIME_ZONE和USE_TZ
TIME_ZONE是設置時區,如果想獲取中國的當前,可以設置 TIME_ZONE = 'Asia/Shanghai',后面獲取當前時間會用到。
同時把USE_TZ設置為False,要不然數據庫的實際和當前系統時間不一致
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans' # 設置簡體中文,zh-Hant是繁體中文
# TIME_ZONE ='UTC' # 時區
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
# USE_TZ = True
USE_TZ = False
修改完之后,在admin后台添加一條數據,時間就是當前時間,數據庫查詢到也是當前時間了