1. 程式人生 > >python測試開發django-20.添加創建時間DateTimeField

python測試開發django-20.添加創建時間DateTimeField

中國 種類型 ons 結果 測試 gis create src make

前言

我們在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 默認值為fals

這個參數的默認值為False,設置為True時,會在model對象第一次被創建時,將字段的值設置為創建時的時間,以後修改對象時,字段的值不會再更新。
該屬性通常被用在存儲“創建時間”的場景下。與auto_now類似,auto_now_add也具有強制性,一旦被設置為True,就無法在程序中手動為字段賦值,在admin中字段也會成為只讀的。

auto_now_add 默認值為fals

這個參數的默認值為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

TIME_ZONE是設置時區,如果想獲取中國的當前,可以設置 TIME_ZONE = ‘Asia/Shanghai‘,後面獲取當前時間會用到。

# 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  

如果不設置的話,當前時間和中國時間會相差八個小時。

python測試開發django-20.添加創建時間DateTimeField