如何在Django中单独设置TimeField 00:00:00:

时间:2018-09-26 05:54:53

标签: python django django-models

在这里,我默认在此日期字段中提到了我的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"
}

4 个答案:

答案 0 :(得分:0)

使用public class IndexModel : PageModel { private readonly IMyClass _myClass; public IndexModel(IMyClass myClass) { _myClass = myClass; } public void OnGet() { _myClass.SampleMethod(); } } 代替DateField

答案 1 :(得分:0)

似乎您根本不​​需要时间成分;如果您打算在所有情况下将其归零,则将其存储是没有意义的。

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

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的内置序列化,则可以write a custom encoder以这种方式将日期转换为零时日期时间

答案 2 :(得分:0)

来自Django文档的Field.default:

  

该字段的默认值。这可以是值或可调用   宾语。如果可调用,则每次有新对象时都会调用它   创建。

这样做:

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)

答案 3 :(得分:0)

您可以使用class MaterialMaster < ApplicationRecord has_many :material_locations accepts_nested_attributes_for :material_locations,allow_destroy: true end 方法删除time对象的datetime部分:

.replace()

这将导致:

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