首页 > 解决方案 > Django forms date.today() 在早上没有返回正确的日期

问题描述

我有一个表格:

class DateInput(forms.DateInput):
input_type = "date"

Date = forms.DateField(widget=DateInput(),initial=datetime.date.today().strftime('%Y-%m-%d'))

但是我只有在上午 10 点之后才有正确的日期,在我有酵母日的日期之前。知道我想念什么吗?

谢谢

标签: djangoformsdate

解决方案


intial仅在您启动服务器时评估一次。所以只要服务器没有重启,它就会保持重启的日期。

您可以将可调用对象传递给函数:

class DateInput(forms.DateInput):
    input_type = 'date'

# …

date = forms.DateField(
    widget=DateInput(),
    initial=datetime.date.today
)

请注意,这可能是时区敏感的。如果你想要一个不同的时区,你可以定义一个函数来提供正确的日期:

from django.utils import timezone
from pytz

utc_14 = pytz.timezone('Pacific/Tongatapu')

def initial_date():
    return utc_14.normalize(timezone.now()).date()

…

date = forms.DateField(
    widget=DateInput(),
    initial=initial_date
)

这将在这一刻回归datetime.date(2020, 7, 3),因为现在在汤加塔布已经是 7 月 3 日。

格式不是由initial参数决定的。您需要为此使用设置DATE_FORMAT[Django-doc]DATE_INPUT_FORMAT设置 [Django-doc]之类的设置。此外,它还取决于本地化设置。


推荐阅读