专栏首页从零开始学自动化测试python测试开发django-20.添加创建时间DateTimeField

python测试开发django-20.添加创建时间DateTimeField

前言

我们在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和USE_TZ

TIME_ZONE是设置时区,如果想获取中国的当前,可以设置 TIME_ZONE = ‘Asia/Shanghai’,后面获取当前时间会用到。 同时把USE_TZ设置为False,要不然数据库的实际和当前系统时间不一致

# 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 
USE_TZ = False

修改完之后,在admin后台添加一条数据,时间就是当前时间,数据库查询到也是当前时间了

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python测试开发django-69.templates模板过滤器filter

    templates 模板里面过滤器 filter 的作用是对变量的出来,比如小写转大写,替换一些特殊字符,对列表取值,排序等操作。 内置的过滤器有很多,本篇拿几...

    上海-悠悠
  • python测试开发django-20.添加创建时间DateTimeField

    我们在admin后台发布一篇文章的时候,一般会有创建时间和最后更新时间这2个字段,创建时间就是第一次编辑文章的时候自动添加的,最后更新时间就是每次修改文章的内容...

    上海-悠悠
  • python测试开发django-17.admin后台管理

    通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作。django的admin后台管理主要可以实现以下功能

    上海-悠悠
  • 除了Selenium,介绍一款新的网页自动化工具来爬虫

    各种各样的网站在我们日常工作和学习中占据着举足轻重的地位,学习、影音娱乐、查询资料、协同办公,越来越多的任务都被迁移到浏览器。

    朱小五
  • Github 项目 - OpenPose 关键点输出格式

    [4] - Rendering Face and Hands Without Pose:

    AIHGF
  • 【业界】Windows卫士出现严重漏洞,微软现已对其进行了修补

    这真是一个可怕的错误! Windows卫士中的远程代码执行漏洞——可以利用恶意的.rar文件在个人电脑上运行恶意软件。此漏洞可以追溯到微软自己使用的开源存档工具...

    AiTechYun
  • C++核心准则T.12:声明局部变量类型时,概念比auto更好

    auto is the weakest concept. Concept names convey more meaning than just auto.

    面向对象思考
  • objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?

    今天在看书上的一段代码时,发现NSString实例化时,有时用的是initWithFormat方法,有时用的是stringWithFormat,到底应该如何选择...

    菩提树下的杨过
  • kubeconfig的用法及生成配置文件

    kubectl默认会从$HOME/.kube目录下查找文件名为 config 的文件,也能通过设置环境变量 KUBECONFIG 或者通过设置去指定其它 kub...

    菲宇
  • H3C端口安全技术

    在网络日益发达的今天,安全是不得不关注的一个话题。而在企业中威胁交换机端口的行为比较多,例如未经授权的用户主机随意连接到企业的网络中。如员工自己笔记本,可以在不...

    py3study

扫码关注云+社区

领取腾讯云代金券