1 回答

TA贡献1825条经验 获得超6个赞
这不起作用的原因是因为您调用了该函数。因此,这意味着datetime在解释类时对 进行求值,所以这基本上是在您启动服务器时进行的。在那一刻,冷冻枪还没有激活。
因此,这也意味着如果您稍后运行服务器一段时间,并且年份增加,它仍将使用旧值。
您可以将可调用对象传递给默认值,从而使用辅助函数,例如:
def quarter_results_date(month):
yr = datetime.datetime.now().year
__, dy = calendar.monthrange(yr, month)
return datetime.datetime(
yr,
month,
dy
)
def quarter_results_date_first():
return quarter_results_date(1)
class Company(models.Model):
q1_results_date = models.DateField(
verbose_name='Q1 financial results',
default=quarter_results_date_first,
blank=False,
null=False,
)
请注意, 没有使用括号default=quarter_results_date_first,因此我们将引用传递给函数,而不是日期时间值。
添加回答
举报