python測試開發django(18)--新增建立時間DateTimeField
前言
我們在admin後臺釋出一篇文章的時候,一般會有建立時間和最後更新時間這2個欄位,建立時間就是第一次編輯文章的時候自動新增的,最後更新時間就是每次修改文章的內容後自動更新
在models.py建表的時候,設定create_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下新建一個Articles類,新增title、body、auth、create_time、update_time欄位。
CharField是字串型別,必須要有max_length引數,當正文的文字內容很多時,需使用TextField
# coding:utf-8 from django.db import models # Create your models here. #新建一個Man類,繼承自models.Model class Articles(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=True表示允許在表單中不輸入值。
admin.py登錄檔
在admin.py添加註冊表的資訊,然後執行下面兩句,同步資料庫(先後順序可隨意)
python manage.py makemigrations python manage.py migrate
# coding:utf-8 from django.db import models # Create your models here. #新建一個Man類,繼承自models.Model class Articles(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) #最後更新時間
admin後臺
開啟admin後臺,新增一條記錄
編輯標題、正文、作者之後儲存
列表頁面顯示結果如下,如果重新編輯的話,最後更新時間也會更新
修改後,update time時間變了;