首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django模型创建了DateTimeField & now差异

基础概念

Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。在 Django 中,模型(Model)是数据库表的 Python 表示。DateTimeField 是 Django 模型中的一种字段类型,用于存储日期和时间信息。

创建 DateTimeField

在 Django 模型中创建 DateTimeField 的示例如下:

代码语言:txt
复制
from django.db import models

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
  • auto_now_add=True:当对象第一次被创建时,自动将字段设置为当前日期和时间。
  • auto_now=True:每次保存对象时,自动将字段更新为当前日期和时间。

now 差异

now 是 Django 提供的一个函数,用于获取当前日期和时间。它通常用于手动设置 DateTimeField 的值。

代码语言:txt
复制
from django.utils import timezone

class MyModel(models.Model):
    created_at = models.DateTimeField(default=timezone.now)

相关优势

  1. 自动管理时间戳:使用 auto_now_addauto_now 可以自动管理时间戳,减少手动操作的错误。
  2. 时区支持:Django 提供了时区支持,可以确保时间戳在不同时区的一致性。
  3. 灵活性:可以手动设置时间戳,适用于需要特定时间戳的场景。

类型

  • DateTimeField:存储日期和时间。
  • DateField:仅存储日期。
  • TimeField:仅存储时间。

应用场景

  • 记录创建和更新时间:在博客、评论、订单等模型中记录创建和更新时间。
  • 定时任务:在任务调度中记录任务的开始和结束时间。
  • 日志记录:在日志模型中记录事件发生的时间。

遇到的问题及解决方法

问题:为什么 DateTimeField 没有自动更新?

原因

  • auto_now_add=True 只在对象第一次创建时生效。
  • auto_now=True 在每次保存对象时生效,但如果对象的 save 方法被重写且没有调用父类的 save 方法,则不会自动更新。

解决方法: 确保在重写 save 方法时调用父类的 save 方法:

代码语言:txt
复制
class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        super(MyModel, self).save(*args, **kwargs)  # 确保调用父类的 save 方法

问题:如何处理时区问题?

原因: Django 默认使用 UTC 时间,但在某些情况下,可能需要使用本地时间。

解决方法: 在 settings.py 中配置时区:

代码语言:txt
复制
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django2实战2.创建博客应用创建应用文章表的字段设计激活应用开启后台将post模型注册到后台自定义文章显示字段增加可选操作

继上篇 django2实战1.初识django 创建应用 上篇创建了一个项目,项目相当于站点,应用即是独立的功能模块。比如:淘宝是一个完整的网站,即是一个项目。...而淘宝下的聚划算属于一个应用 在django中,一个应用是由模型、视图、模板以及url配置组成的。...(default=timezone.now) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField...admin index 将post模型注册到后台 blog/admin.py from django.contrib import admin from .models import Post admin.site.register...过滤 下一节将讲解如何使用django模型查询语句。如果你感兴趣,请关注我的django2实战文集 如果觉得本文对你有所帮助,点个赞,或者赏杯咖啡钱,你的认可对我很重要

1.1K30
  • Django开发在线教育平台--学习整理(一)

    日志记录:记录后台人员的操作 系统功能 image.png 模型设计 image.png 模块设计 三、初始化环境 1、新建工程 首先,打开cmd,cd到存放django项目的文件夹,创建一个新工程(也可以用虚拟环境...如果我们需要扩展可以复写AbsractUser模型,之后,需要在settings中告诉django我们新的用户模型: # 由于复写了user模型,我们需要重载AUTH_USER_MODEL参数,导入我们复写后的模型...然后运行migrate,将写好的数据迁移到数据库中: python manage.py makemigrations python manage.py migrate 这时,打开pgAdmin4,就会发现创建了...然后,在每个app下的admin.py中注册并定制admin后台模型: from django.contrib import admin from .models import Course, Lesson...基本的结构搭建好了,模型有了,admin也能用了,下面就开始把前端页面构建起来了。

    3K90

    Django 2 DateTimeField格式 在程序中手动赋值

    需求描述 一般在数据模型中设置创建时间、更新时间的时候都会使用DateTimeField的格式,也会设置时间自动设置,示例如下: create_time = models.DateTimeField(auto_now_add...=True, verbose_name='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') 可以看到上面使用了...DateTimeField.auto_now 这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。...赋值的方法 其实DateTimeField字段对应的就是Python里的datetime.datetime,也可以使用django.utils.timezone.now() 的方法来进行时间设置。...datetime.datetime(2019, 9, 19, 10, 40, 23, 944737) # 导入django.utils.timezone In [12]: from django.utils

    3.1K10

    Django 2 DateTimeField格式 在程序中手动赋值

    需求描述 一般在数据模型中设置创建时间、更新时间的时候都会使用DateTimeField的格式,也会设置时间自动设置,示例如下: create_time = models.DateTimeField(auto_now_add...DateTimeField.auto_now 这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。...赋值的方法 其实DateTimeField字段对应的就是Python里的datetime.datetime,也可以使用django.utils.timezone.now() 的方法来进行时间设置。...datetime.datetime(2019, 9, 19, 10, 40, 23, 944737) # 导入django.utils.timezone In [12]: from django.utils...='任务预计结束时间') 完整模型类如下: class TaskScenario(BaseModel): """任务场景""" users = models.IntegerField(

    71920

    Django 2.1.7 模型类 - 字段类型

    上一篇Django 2.1.7 模型 - 使用mysql数据库连接访问讲述了如何使用mysql作为数据库,执行模型查询数据,并返回渲染页面。...在官方文档中,关于字段类型的描述非常多,如下: 模型字段的定义属性 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列...参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。 TimeField:时间,参数同DateField。 DateTimeField:日期时间,参数同DateField。...(auto_now_add=True) # 数据加入时间 update_time = models.DateTimeField(auto_now=True) # 数据更新时间 is_delete...(auto_now_add=True) # 数据加入时间 update_time = models.DateTimeField(auto_now=True) # 数据更新时间 is_delete

    1.2K10

    如何在 Django 中创建抽象模型类?

    我们将学习如何在 Django 中创建抽象模型类。 Django 中的抽象模型类是一个模型,它用作其他模型继承的模板,而不是一个旨在创建或保存到数据库的模型。...在应用程序中,可以使用抽象模型定义多个模型共享的相似字段和行为。使用 Django,您可以定义一个派生自 Django.db.models 的模型类,以建立一个抽象模型类。...我们创建了另一个名为“ArticleModel”的模型,该模型在参数中获取抽象模型并使用这些字段。它包含两个字段,“名称”和“作者”。...is created    created_at = models.DateTimeField(auto_now_add=True)    # Time when the record is updated...    updated_at = models.DateTimeField(auto_now=True)    class Meta:       abstract = True class ArticleModel

    20130

    Django 2.1.7 模型类 - 字段类型

    上一篇Django 2.1.7 模型 - 使用mysql数据库连接访问讲述了如何使用mysql作为数据库,执行模型查询数据,并返回渲染页面。...在官方文档中,关于字段类型的描述非常多,如下: 模型字段的定义属性 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列...参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。 TimeField:时间,参数同DateField。 DateTimeField:日期时间,参数同DateField。...(auto_now_add=True) # 数据加入时间 update_time = models.DateTimeField(auto_now=True) # 数据更新时间 is_delete...(auto_now_add=True) # 数据加入时间 update_time = models.DateTimeField(auto_now=True) # 数据更新时间 is_delete

    1.7K30

    借Djongo之力,在Django中无痛使用MongoDB数据库

    - 定义模型 - Djongo的一大特点是可以无缝地衔接Django的ORM语法,包括模型定义的语法和模型操作的语法。现在,我们就为Django项目定义一些模型。...在默认情况下,Django应用的模型在其目录下的models.py文件中定义。...models.py文件初始化状态下只有如下一行代码: from django.db import models 这是Django数据库封装的模型类,我们需要将其修改为Djongo提供的模型类,如下所示:...(auto_now_add=True) update_time = models.DateTimeField(auto_now=True,auto_now_add=True) def...和使用SQL数据库一样,Django为新项目创建了我们定义的模型还有一些认证管理相关的表,这是否是真的呢,我们去MongoDB数据库里面查看一下: ?

    11.5K50

    用人话讲解django之数据的增删改

    在 web 开发中,最重要的是数据库的设计,就是 models 模型设计,简单的web开发说白了就是对数据库的增删改查,今天先看下数据库的增加,修改,和删除吧,我们操作数据库可以使用原生sql语句,但是如果...我现在的model模型是有两个表,一个学生表,一个班级表,代码如下: class Student(models.Model): # 一定要继承 # CharField为字符串类型,必须有max_length...为日期类型,auto_now_add=True该条数据创建的时间,数据更新时,时间数值不变 # auto_now=True该条数据创建的时间,数据更新时,时间数值也会改变 created_at...= models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField...(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name

    40330

    Django项目知识点(三)

    本文一篇完全介绍django的最重要的model 6.django model 模型是数据唯一而且准确的信息来源。它包含正在储存的数据的重要字段和行为。一般来说,每一个模型都映射一个数据库表。...Django有一套默认的按照一定规则生成数据模型对应的数据库表明。...注意:Django在一个模型中只允许有一个自增字段,并且该字段必须为主键!...models.DateField  日期字段类型date 注意:参数auto_now=True表示每次更新都会更新这个时间;参数auto_now_add表示只是第一次创建时添加,之后的更新不再改变 models.DateTimeField...DateTimeField DateTimeField.auto_now 这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。

    1.8K30
    领券