我试图将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'
的目的。我该如何正确解决这个问题?
答案 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
方法。