创建django的model时,有DateTimeField、DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三种对象。这三个field有着相同的参数auto_now和auto_now_add,在实际使用中很容易出错。
在首次创建对象时自动将字段设置为现在。用于创建时间戳。注意当前日期是使用 always;它不只是一个默认值,你可以覆盖。因此,即使在创建对象时为此字段设置了一个值,它也将被忽略。如果您想要修改此字段,请设置以下内容而不是 auto_now_add=True:
即:auto_now_add当保存一个数据对象的时候会自动设置当前时间
对于 DateField:default=date.today - 来自 datetime.date.today()
对于 DateTimeField:default=timezone.now - 来自 django.utils.timezone.now()
选项 auto_now_add,auto_now 和 default 是互斥的。这些选项的任何组合将导致错误。
注解
按照目前的实现,将 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.
为了页面和数据库中显示一致,需要在页面格式化时间,需要添加{
{ infor.updatetime|date:“Y-m-d H:i:s” }} 类似的过滤器。刷新页面,即可正常显示。
转载自https://www.cnblogs.com/fixdq/p/9226588.html前言创建django的model时,有DateTimeField、DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三种对象。这三个field有着相同的参数auto_now和auto_now_add,在实际使用中很容易出错。DateFieldclass DateField(auto_now=False, auto_now_add
class Exam(models.Model):
category = cached_fields.ForeignKeyField(Category)
name = models.CharField(max_length=128)
date = models.DateField()
created_at = models.DateTimeField(
auto
_now_
add
=True)
updated_at = models.DateTimeField(
auto
_now=True)
class Meta:
unique_together =
创建
django
的model时,有DateTimeField、DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三中对象。这三个field有着相同的参数
auto
_now和
auto
_now_
add
,表面上看起来很easy,但实际使用中很容易出错,下面是一些注意点。
DateTimeField.
auto
_now
这个参...
abstract = True
# 下面表示先根据更新时间gmt_modify降序排序,如果更新时间相同,再根据创建时间gmt_create降序排序
ordering = ['-gmt_modify', '-gmt_create']
gmt_create = models.DateTimeField('创建时间
当我们在
Django
系统里定义 models.py 文件时,有时候会涉及到 DateTimeField 或者 DateField 或者 TimeField,分别对应的是 MySQL 里面的几个关于时间的字段。
这些字段用于我们保存或者更新某条数据时做的时间的一个标记,那么其中就会涉及到两个参数,
auto
_now 和
auto
_now_
add
。
如下所示:
created_time = Date...
auto
_now=Ture,字段保存时会自动保存当前时间,但要注意每次对其实例执行save()的时候都会将当前时间保存,也就是不能再手动给它存非当前时间的值。每一次执行修改等动作,时间保持当前的。而非首次的创建时间。
auto
_now_
add
=True,字段在实例第一次保存的时候会保存当前时间,不管你在这里是否对其赋值。但是之后的s...
auto
_now无论是你添加还是修改对象,时间为你添加或者修改的时间,一般用作更新时间。
auto
_now_
add
auto
_now_
add
为添加时的时间,更新对象时不会有变动,一般用作创建时间。
具体案例:
class BaseModel(models.Model):
'''
模型
抽象类型'''
create_time = models.DateTimeField(
auto
_now_
add
=True, verbose_name='创建时间')
update_time
Django
中DateField的
auto
_now和
auto
_now_
add
的
区别
最近在学习python和
Django
(1.11.6)碰到这个问题了记录一下
官方文档关于DateField字段的说明:
链接: https://docs.
django
project.com/en/1.11/ref/models/fields/.
看完之后有点迷糊,以下本人的试验和理解:
1.当
auto
_now和au...
和
auto
_now_
add
的
区别
是什么?
auto
_now和
auto
_now_
add
都是
Django
中的Model Field选项,用于设置一个datetime字段自动保存当前日期时间。
auto
_now_
add
用于在对象第一次被创建时自动保存当前日期时间,之后更新该对象时不会再改变这个字段的值;
auto
_now用于在每次更新对象时自动保存当前日期时间,即每次保存对象时都会更新这个字段的值。
因此,
auto
_now_
add
和
auto
_now的
区别
在于
auto
_now_
add
只在对象创建时保存一次时间戳,而
auto
_now在每次更新对象时都会更新时间戳。