将 DateInput 小部件的格式更改为 SHORT_DATE_FORMAT
Change DateInput widget's format to SHORT_DATE_FORMAT
我正在尝试将 DateInput
的 format
设置为 SHORT_DATE_FORMAT
。但是,下面的代码不起作用。
forms.py
from django.conf.global_settings import SHORT_DATE_FORMAT
class EventForm(ModelForm):
# ...
startDate = forms.DateField(
widget=forms.DateInput(
format=SHORT_DATE_FORMAT
)
)
在 views.py 中,从数据库中读取了一个示例条目,并使用 form = EventForm(instance=event1)
创建了一个表单。然后模板使用 {{form.startDate}}
显示该小部件。输入正确显示,只是它的值不是日期而是 "m/d/Y".
如果我设置 format='%m/%d/%Y'
,它会起作用,但是,这违背了区域设置感知 SHORT_DATE_FORMAT
的目的。我该如何正确解决?
一个可能的解决方案是如下覆盖 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
方法以重用 django.templates
.
定义的 date
方法
我正在尝试将 DateInput
的 format
设置为 SHORT_DATE_FORMAT
。但是,下面的代码不起作用。
forms.py
from django.conf.global_settings import SHORT_DATE_FORMAT
class EventForm(ModelForm):
# ...
startDate = forms.DateField(
widget=forms.DateInput(
format=SHORT_DATE_FORMAT
)
)
在 views.py 中,从数据库中读取了一个示例条目,并使用 form = EventForm(instance=event1)
创建了一个表单。然后模板使用 {{form.startDate}}
显示该小部件。输入正确显示,只是它的值不是日期而是 "m/d/Y".
如果我设置 format='%m/%d/%Y'
,它会起作用,但是,这违背了区域设置感知 SHORT_DATE_FORMAT
的目的。我该如何正确解决?
一个可能的解决方案是如下覆盖 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
方法以重用 django.templates
.
date
方法