Django中的日期和时间、DateField.auto_now、DateField.auto_now_add

前言

创建django的model时,有DateTimeField、DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三种对象。这三个field有着相同的参数auto_now和auto_now_add,在实际使用中很容易出错。

DateTimeField

class DateField(auto_now=False, auto_now_add=False, **options)  # 默认

日期,由 datetime.date 实例在Python中表示。有一些额外的可选参数(下面的有总结)

DateTimeField

class DateTimeField(auto_now=False, auto_now_add=False, **options)

日期和时间,由Python在 datetime.datetime 实例中表示。采用与 DateField 相同的额外参数。

TimeField

class TimeField(auto_now=False, auto_now_add=False, **options)

一个时间,在Python中由 datetime.time 实例表示。接受与 DateField 相同的自动填充选项。

关键点:auto_now和auto_now_add

DateField.auto_now

每次保存对象时,自动将字段设置为现在。用于“最后修改”的时间戳。注意当前日期是使用 always;它不只是一个默认值,你可以覆盖。

该字段仅在调用 Model.save() 时自动更新。在以其他方式(例如 QuerySet.update())更新其他字段时,不会更新该字段,但您可以在此类更新中为字段指定自定义值。

DateField.auto_now_add

在首次创建对象时自动将字段设置为现在。用于创建时间戳。注意当前日期是使用 always;它不只是一个默认值,你可以覆盖。因此,即使在创建对象时为此字段设置了一个值,它也将被忽略。如果您想要修改此字段,请设置以下内容而不是 auto_now_add=True

  • 对于 DateFielddefault=date.today - 来自 datetime.date.today()
  • 对于 DateTimeFielddefault=timezone.now - 来自 django.utils.timezone.now()

选项 auto_now_addauto_nowdefault 是互斥的。这些选项的任何组合将导致错误。

注解
按照目前的实现,将 auto_now 或 auto_now_add 设置为 True 将使该字段具有 editable=False 和 blank=True 设置。
注解

auto_now 和 auto_now_add 选项将始终在创建或更新时使用 默认时区中的日期。如果你需要不同的东西,你可能想考虑简单地使用自己的可调用的默认值或覆盖 save(),而不是使用 auto_now 或 auto_now_add;或者使用 DateTimeField 而不是 DateField 并且决定如何处理在显示时间从日期时间到日期的转换。

常见问题:如何将创建时间设置为“默认当前”并且可修改

在现实生产环境中,往往希望对象的创建时间默认设置为当前值,但又希望日后可以修改它,如何实现这种需求的呢。

django中所有的model字段都拥有一个default参数,用来给字段设置默认值(上面的文档中有介绍)。

我们可以使用default=timezone.now()来替换auto_now=True或auto_now_add=True。

default=timezone.now 对应 django.utils.timezone.now()

from django.db import models
import django.utils.timezone as timezone
class Test(models.Model):
    add_date = models.DateTimeField(‘保存日期‘,default = timezone.now)
    mod_date = models.DateTimeField(‘最后修改日期‘, auto_now = True

html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2018-06-25 22:00:00,但是页面显示的却是Apr. 25, 2018, 10 p.m.

为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td>{{ infor.updatetime|date:"Y-m-d H:i:s" }}</td> 类似的过滤器。刷新页面,即可正常显示。

原文地址:https://www.cnblogs.com/fixdq/p/9226588.html

时间: 2024-10-27 12:18:08

Django中的日期和时间、DateField.auto_now、DateField.auto_now_add的相关文章

PHP中的日期和时间

日期和时间    1.UNIX时间戳        以32位整数表示的格林威治标准时间        这个UNIX时间戳整数是从1970年1月1日0时0分0秒(计算机元年)到现在的秒数        作用:方便我们计算使用(参与计算)    2.在PHP中获取日期和时间        time() 返回当前的Unix时间戳        getdate() 取得日期/时间信息    返回值是一个关联数组        gettimeofday()获取当前时间        date_sunris

VB6.0中,日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)

VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 代码如下: 文本框txtStopTime1 时间框DTStopTime1 格式3 - dtpCustom  HH:mm:ss Private Sub Form_Load()       txtStopTime1.ZOrder       DTStopTime1.Top = txtStopTime1.Top       DTStopTime1.Left = txtStopTi

在PHP中获取日期和时间

PHP提供了多种获取时间和日期的函数,除了通过time()函数获取当前的UNIX时间戳外,调用getdate()函数确定当前时间,通过gettimeofday()函数获取某一天中的具体时间.此外,在PHP中还可以通过date_sunrise()和date_sunset两个函数,获取某地点某天的日出和日落时间. ①调用getdate()函数取得日期/时间信息 getdate()函数返回一个时间戳组成的关键数组,参数需要一个可选的UNIX时间戳.如果没有给出时间戳,则认为是当前本地时间.总共返回11

Matlab中处理日期与时间的函数

Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示为733646.5,也就是说任何一个时刻都可以用一个双精度型数字表示. (2)不同形式的日期字符串:Matlab定义了28种标准日期格式的字符串. (3)数值型的日期向量:用一个6元数组来表示一个日期时间,例如,[2008 8 26 12 5 0]表示2008年8月26日12点05分0秒:用一个3元

java8中处理日期和时间

Java 8 中如何处理日期和时间 1. 在 Java 8 中获取今天的日期 Java 8 中的 LocalDate 用于表示当天日期.和 java.util.Date 不同,它只有日期,不包含时间.当你仅需要表示日期时就用这个类. LocalDate now = LocalDate.now(); System.out.println(now); //结果 2018-06-20 2. 在 Java 8 中获取年.月.日信息 LocalDate 类提供了获取年.月.日的快捷方法,其实例还包含很多其

Django中的日期处理注意事项和自定义时间格式转换

我们在用Django创建models时,常常会涉及时间日期字段的处理,Django里日期相关Field有DateTimeField.DateField和TimeField三种类型,看似简单,但其中有一些容易出错的地方需要注意:另外,如果不习惯Django的默认时间格式,也可以自定义的修改. DateTimeField.DateField和TimeField,其值分别对应着Python里的datetime.datetime.datetime.date和datetime.time三个实例,这三个Fi

[笔记]格式化jqGrid中的日期与时间,解决时分秒都显示为0

项目中的一个jqGrid列表页面的一列需要显示日期和时间,如:2011-08-10 10:20:30,查阅官方wiki文档的说明和例子,然后在colModel的需要格式化时间的列的formatter:'date'的后面加了一些 formatoptions配置,但IE和FF浏览器中都没有效果,也没提示什么错误~ 无奈官方wiki文档的日期时间格式化部分的说明和例子对我来说不够细,只好查看jquery.fmatter.js中的源代码的DateFormat部 分,还好查出来了,原来srcformat和

java中获取日期和时间的方法总结

1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); date.getTime() ; 还有一种方式,使用 System.currentTimeMillis() ;都是得到一个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年一月一号零时零分零秒相差的毫秒数 一.获取当前时间,   格式为:   yyyy-mm-dd   hh-mm

javascript中关于日期和时间的基础知识

× 目录 [1]标准时间 [2]字符串 [3]闰年[4]月日[5]星期[6]时分秒 前面的话 在介绍Date对象之前,首先要先了解关于日期和时间的一些知识.比如,闰年.UTC等等.深入了解这些,有助于更好地理解javascript中的Date对象.本文将介绍javascript关于日期和时间的基础知识 标准时间 一般而言的标准时间是指GMT和UTC,以前是GMT,现在是UTC GMT 格林尼治标准时间(GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线