如何单独设置时间字段 00:00:00:在 django 中



在这里,我在此日期字段中提到了我的 model.py,默认情况下,我想将时区分配为00:00:00,所以请帮助我执行此操作。

Models.py

class Dummy(models.Model):
name = models.CharField(max_length=100)
date = models.DateTimeField(null=True,auto_now_add=True)

预期输出如下

{
"id": 1,
"name": "xxxx",
"date": "2018-09-26T00:00:00Z"
}

实际输出

{
"id": 1,
"name": "xxxx",
"date": "2018-09-26T05:52:26.626604Z"
}

来自 Field.default 的 Django 文档:

字段的默认值。这可以是值或可调用对象 对象。如果可调用,则每次新对象 创建。

所以这样做:

from datetime import datetime, timedelta
def default_start_time():
now = datetime.now()
start_time = now.replace(hour=00, minute=0, second=0, microsecond=0)
return start_time 
class Dummy(models.Model):
name = models.CharField(max_length=100)
date = models.DateTimeField(null=True,auto_now_add=True,default=default_start_time)

使用DateField而不是DateTimeField

似乎你根本不想要时间部分; 如果您打算在所有情况下将其归零,那么存储它是没有意义的。

只保留日期,并在序列化程序中使用该日期实例化日期时间。

from datetime import date, datetime

# Where t would normally be a date from your model...
t = date.today()
print(datetime(t.year, t.month, t.day).isoformat())
# 2018-09-26T00:00:00

你还没有向我们提供有关如何生成此 JSON 的信息,但如果您使用的是 Django 的内置序列化,您可以编写一个自定义编码器来处理以这种方式将日期转换为零时间日期时间。

您可以使用.replace()方法删除datetime对象的time部分:

self.date = self.date.replace(hour=0, minute=0, second=0, microsecond=0)

这将导致:

datetime.datetime(2018, 9, 26, 0, 0)

相关内容

  • 没有找到相关文章

最新更新