将DateInput小部件的格式更改为SHORT_DATE_FORMAT

时间:2015-05-11 19:19:34

标签: django localization django-forms

我试图将format的{​​{1}}设置为DateInput。但是,以下代码无法正常工作。

forms.py

SHORT_DATE_FORMAT

在views.py中,从数据库中读取一个示例条目,并使用from django.conf.global_settings import SHORT_DATE_FORMAT class EventForm(ModelForm): # ... startDate = forms.DateField( widget=forms.DateInput( format=SHORT_DATE_FORMAT ) ) 创建一个表单。然后,模板使用form = EventForm(instance=event1)显示该窗口小部件。输入正确显示,只有它的值不是日期,而只是" m / d / Y"。

如果我设置{{form.startDate}},那将会有效,但这会破坏区域设置感知format='%m/%d/%Y'的目的。我该如何正确解决这个问题?

1 个答案:

答案 0 :(得分:1)

可能的解决方案是覆盖DateInput窗口小部件,如下所示。

from django.template.defaultfilters import date

class ShortFormatDateInput(DateInput):

    def __init__(self, attrs=None):
        super(DateInput, self).__init__(attrs)

    def _format_value(self, value):
        return date(value, formats.get_format("SHORT_DATE_FORMAT"))

它会覆盖超级构造函数,因此无法再手动更改日期格式。相反,我想显示SHORT_DATE_FORMAT中定义的日期。为此,可以覆盖_format_value方法以重复使用date定义的django.templates方法。