1. 程式人生 > 實用技巧 >python測試開發django(18)--新增建立時間DateTimeField

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時間變了;