前言
我們在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時間變了;