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

Change DateInput widget's format to SHORT_DATE_FORMAT

我正在尝试将 DateInputformat 设置为 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 方法