【问题标题】:Django: Give date field default value of one month from todayDjango:从今天开始给日期字段默认值一个月
【发布时间】:2018-08-09 03:31:05
【问题描述】:

在 Django 中,您可以有一个日期字段并将默认值设置为今天。

start_date = models.DateField(default=timezone.now, blank=True, null=True)

如何将默认日期设置为从今天起 1 个月?

【问题讨论】:

  • 手动是不可能的吗? start_date = models.DateField(default=timezone.now.replace(month=timezone.now.month-1)) 或类似的东西?
  • @Snipper03 这不起作用,因为timezone.now 不是日期时间值,而是可调用的,即对函数的引用。
  • 是的,它是 django.utils 中的函数。那么如何启动一个获取一个月前日期的功能,作为模型的方法呢?比如get_date_one_month_ago,在model的定义区调用。

标签: django django-models datefield


【解决方案1】:

您可以使用任何可调用对象作为默认值,这样应该可以工作:

from datetime import timedelta

def one_month_from_today():
    return timezone.now() + timedelta(days=30)

class MyModel(models.Model):
    ...
    start_date = models.DateField(default=one_month_from_today, blank=True, null=True)

请注意,我使用了 days=30,因为 timedelta 无法将 添加到日期值。如果您考虑一下,“从今天起一个月”是一个非常开放的声明(例如,您希望它在今天是 1 月 31 日时表现如何?)。

【讨论】:

  • 不需要确切的月份,30 天就足够了。如果你真的想做一个月,那么你可以得到当前的月份和年份,并将该月的天数添加到其中。谢谢,这对我有用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
相关资源
最近更新 更多