gpt4 book ai didi

python - 如何将 timedelta 与 timezone.now 一起使用为默认值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:20 27 4
gpt4 key购买 nike

在 Django 模型中,如何使用 timezone.now 增加日期字段?

工作:

end_date = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=365))

不工作

end_date = models.DateTimeField(default=timezone.now + timezone.timedelta(days=365))

我认为 timezone.now 是一个在每次创建对象时运行的函数。从而发生错误。

最佳答案

你可以使用一个函数:

def f():
return timezone.now() + timezone.timedelta(days=365)
...
end_date = models.DateTimeField(default=f)

每当默认创建新的 end_date 时,该时区的当前时间都会添加 timedelta:

>>> from django.utils import timezone
>>> from datetime import timedelta
>>> def f():
... return timezone.now() + timezone.timedelta(days=365)
...
>>> f()
datetime.datetime(2018, 6, 25, 19, 42, 49, 761389, tzinfo=<UTC>)
>>> f()
datetime.datetime(2018, 6, 25, 19, 43, 2, 953158, tzinfo=<UTC>)

使用 Django 运行示例:

In [1]: from testapp import models

In [2]: models.Test.objects.create().date_added
Out[2]: datetime.datetime(2018, 6, 25, 20, 5, 28, 316214, tzinfo=<UTC>)

In [3]: models.Test.objects.create().date_added
Out[3]: datetime.datetime(2018, 6, 25, 20, 5, 33, 114624, tzinfo=<UTC>)

关于python - 如何将 timedelta 与 timezone.now 一起使用为默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44749494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com