cms*_*mgr 1 python django date
我有两个模型,两个模型都有一个默认为当前日期的日期字段,无论是什么。今天,有人指出他们收到其中一个错误,该错误将日期设置为 12 月 19 日,而不是 12 月 23 日(今天撰写本文时)。
我原以为这两个字段的设置相同,所以我检查了两者之间是否存在意外差异,并发现了一个差异。但我很惊讶,因为“工作”的那个在我看来似乎包含一个错误。这些字段设置如下:
# Working field
date_stamp = models.DateField(default=datetime.date.today)
# Broken field
date_statp = models.DateField(default=datetime.date.today())
Run Code Online (Sandbox Code Playgroud)
我一直认为today需要调用该函数以确保该值不被缓存。事实恰恰相反吗?有人可以解释这两者在模型实例创建时实际上是如何解释的吗?
第一个字段:
date_stamp = models.DateField(default=datetime.date.today)
Run Code Online (Sandbox Code Playgroud)
将回调作为默认值。这意味着每次需要填充默认值时都会调用该函数。
另一个:
date_statp = models.DateField(default=datetime.date.today())
Run Code Online (Sandbox Code Playgroud)
执行函数datetime.date.today,该函数返回当时的日期值。因此,当 Django 初始化模型时,它将默认值设置为该精确时刻的日期。这个默认值将一直使用,直到 Django 再次重新初始化模型,这通常只在启动时进行。