django学习-24.创建时间和更新时间的添加
阅读原文时间:2023年07月08日阅读:4

目录结构

1.前言

2.入参auto_now和入参auto_now_add

2.1.入参auto_now的相关知识点

2.2.入参auto_now_add的相关知识点

3.完整的操作流程

3.1.第一步:创建一个模型类

3.2.第二步:创建数据表

3.3.第三步:【admin.py】里进行配置

3.4.第四步:成功登陆admin管理后台

3.5.第五步:成功新增一篇文章

3.6.第六步:成功更新一篇文章

1.前言

我们通过admin管理后台新增一篇文章的时候,一般都要有【创建时间】和【最后更新时间】这2个字段,并且我们希望这2个字段的赋值规则如下:

  • 第一次新增文章内容成功后:【创建时间】和【最后更新时间】的值都会被自动赋值为新增文章成功时的系统时间,此时【创建时间】和【最后更新时间】的值一定相等;
  • 每次修改文章内容成功后:【创建时间】的值都不变都一直是新增文章成功时的系统时间,【最后更新时间】的值会被自动更新赋值为修改文章内容成功时的系统时间,此时【创建时间】和【最后更新时间】的值一定不相等;

细节:

①.每张数据表在设计阶段,其实都应该都要有【创建时间】和【最后更新时间】这2个字段,因为这2个字段经常会被用于做数据排序展示的条件。

2.入参auto_now和入参auto_now_add

每个模型类里,都有DateTimeField和DateField和TimeField这三种类,这三种类可以分别用来创建三种不同日期类型的数据表字段;

这三种类有着相同的参数:auto_now和auto_now_add;

细节:

①.当这三种类里的任意一个类里的入参值auto_now或者auto_now_add的值被设置为True后,会导致:类里的入参editable值变为False,类里的入参blank的值变为True。

②.入参editable值为False,表示:对应表字段不会被展示在admin管理后台里的任何一个页面里比如不会展示在新增页面不会展示在修改页面;

③.入参blank的值为True,表示: 允许用户在新增/编辑页面中不用输入对应表字段的值;

④.入参auto_now和入参auto_now_add的值不能同时设置为True;

入参auto_now的默认值为False;

当入参auto_now的值被设置为True,表示:当一条新数据被修改成功后,将该入参auto_now对应的表字段的值设置为修改成功时的系统时间;

入参auto_now_add的默认值为False;

当入参auto_now_add的值被设置为True,表示:当一条新数据被创建成功后,将该入参auto_now_add对应的表字段的值设置为创建成功时的系统时间,以后修改这条新数据时,该表字段的值不会再更新;

3.完整的操作流程

# 新增一个Article类
class Article(models.Model):
'''文章'''
title = models.CharField(max_length=30) # 标题
body = models.TextField() # 正文(因为文章的正文字数会很多,所以需要使用该类TextField)
author = models.CharField(max_length=10) # 作者
create_time = models.DateTimeField(auto_now_add=True) # 创建时间
update_time = models.DateTimeField(auto_now=True) # 更新时间

通过迁移相关的命令行,比如【python manage.py makemigrations】和【python manage.py migrate】进行创建,相关操作在之前的博客有提到,这里不具体再展开描述;

class ControllerArticle(admin.ModelAdmin):
list_display = ("title","author","body","create_time","update_time")
search_fields = ("title",)

admin.site.register(models.Article,ControllerArticle)