以下是我的项目中的相关设置:

settings.py

TIME_ZONE = "US/Mountain"
USE_TZ = True

models.py(使用timezone.now)

class Submission(models.Model):
    date_created = models.DateField(
        default=timezone.now,
        blank=True,
    )

    datetime_created = models.DateTimeField(
        default=timezone.now,
    )

如果我在2023年3月1日下午5点在MST创建Submission,则会得到以下值:

  • date_created:"2023-03-02"
  • datetime_created:"2023-03-01 17:00:00-07:00"

为什么date_created会使用下一个日期的日期?

推荐答案

如果希望date_created字段存储正确的创建日期,可以使用以下内容修改默认值:default=timezone.now().date()

.date()方法返回DateTime对象的日期部分,这将把date_created字段设置为"2023-03-01"(在本例中--需要新数据库条目),这是正确的创建日期.

因此,您可以try 如下所示的代码:

class Submission(models.Model):
    date_created = models.DateField(
        default=timezone.now().date(),
        blank=True,
    )

    datetime_created = models.DateTimeField(
        default=timezone.now,
    )

DATE_CREATED字段设置为"2023-03-02"的原因是,Datefield类型只存储日期,没有时间信息,因此当您将缺省值设置为timezone.now时,它将采用settings.py文件中指定的时区信息. 因为您已经将settings.py文件上的时区设置为"US/Mountain",比UTC晚7小时.由于TIME_ZONE设置为"US/Mountain",当数据输入发生在03/01/2023 MST下午5点时,以UTC表示的实际日期是02/01/2023(MST和UTC之间的时差).这就是为什么DATE_CREATED的值被设置为"2023-03-02"的原因. You can check timezone converter

Django相关问答推荐

如何根据属性的 Select 对查询集进行排序

把Django测试和testcafe结合起来?

django命令中的no_color不起作用

如何在Django中将字段及其数据从一个模型添加到另一个模型?

django re_path() 函数模式与包含该模式的 url 不匹配

Django通用列表视图与多查询搜索

如何将数据库中的 None 序列化为空对象?

在 settings.py 中指定 Django 测试数据库名称

Playframework 和 Django

Django 模型命名约定

djangorestframework:过滤相关字段

django 在 ubuntu 中安装在哪里

为用户添加自定义权限

Django populate() 不可重入

这是验证 Django 模型字段的方法吗?

模拟 Django 查询集以测试采用查询集的函数

有日期时间±无穷大吗?

Django 模型:delete() 未触发

Django/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2

找不到 msguniq.确保您安装了 GNU gettext 工具 0.15 或更新版本. (Django 1.8 和 OSX ElCapitan)