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

问题描述 投票:-3回答:3

models.朋友

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

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

python django django-models
3个回答
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实例时计算。


0
投票

这是一种方法。

import datetime
class TestModel(models.Model):
      x = datetime.datetime.now() + datetime.timedelta(days = 3)
      event = models.DateTimeField(default = x) 

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

希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.