django模型DateTimeField(默认=接下来的3天)

时间:2017-12-19 14:22:50

标签: python django django-models

models.py

class TestModel(models.Model):
      event = models.DateTimeField(default=next 3-days) 

如何在接下来的3天内获得默认值? 有可能吗?

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)
...

希望有所帮助