【问题标题】:Django: diffence of 4-6 seconds when executing datetime.now() at the models vs viewsDjango:在模型与视图上执行 datetime.now() 时的差异为 4-6 秒
【发布时间】:2015-04-11 22:52:06
【问题描述】:

当我这样做时:

from datetime import datetime, timedelta

def startExam(request):
  examCycle = ExamRecords() 
  examCycle.starttime =  datetime.datetime.now()  
  examCycle.save()

已保存的开始时间与预期相同,但是当我在模型中执行此操作时:

from datetime import datetime, timedelta
class ExamRecords(models.Model):
    starttime = models.DateTimeField(default=datetime.now()) 

时间延迟 4-6 秒。

现在也尝试使用mysql,但差异仍然更糟:

class ExamRecords(models.Model):
    starttime = models.DateTimeField(auto_now_add=True) 

...所以我只想使用相同的 python 代码了解这一秒的原因:)

【问题讨论】:

    标签: mysql django datetime view model


    【解决方案1】:

    您不小心将服务器 [重新] 启动的时间设置为 starttime 字段的默认值。去掉字段定义中datetime.now后面的圆括号:

    starttime = models.DateTimeField(default=datetime.now)
    

    如果要计算字段的默认值,则创建一个函数并将此函数设置为default 参数:

    def default_endtime():
        return datetime.datetime.now() + \
               datetime.timedelta(minutes=settings.TEST_LENGHT_MINUTES)
    
    class MyModel(models.Model):
        starttime = models.DateTimeField(default=datetime.now)
        endtime = models.DateTimeField(default=default_endtime)
    

    【讨论】:

    • 查看更新后的答案。而auto_now_add 是 django 在 default 参数中不支持可调用对象时的历史雏形。
    • 感谢您的延迟,catavaran :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2021-12-03
    相关资源
    最近更新 更多