models.py
class TestModel(models.Model):
event = models.DateTimeField(default=next 3-days)
如何在接下来的3天内获得默认值? 有可能吗?
答案 0 :(得分:4)
您应该使用一个返回所需日期时间的callable,例如:
from datetime import timedelta
from django.utils import timezone
def in_three_days():
return timezone.now() + timedelta(days=3)
class TestModel(models.Model):
event = models.DateTimeField(default=in_three_days)
如果您在Vaibhav的答案中使用x = datetime.datetime.now() + datetime.timedelta(days = 3)
,则在加载模块时将计算x
,而不是在创建每个新TestModel
实例时计算。{/ p>
答案 1 :(得分:0)
这是一种方法。
import datetime
class TestModel(models.Model):
x = datetime.datetime.now() + datetime.timedelta(days = 3)
event = models.DateTimeField(default = x)
答案 2 :(得分:0)
正如一些答案指出你必须使用callable,但你也应该包括时区感知日期时间对象来正确设置接下来的3天,这将按预期工作,并且不会给你时区不知道日期时间对象,这取决于服务器时间
from django.utils import timezone as tz
def next_day_dt(n=3):
return tz.localtime(tz.now()) + tz.timedelta(days=n)
class TestModel(models.Model):
event = models.DateTimeField(default=next_day_dt)
...
希望有所帮助