我有一个带有 DateField 的表单。现有的日期值被格式化为如下所示:
2009-10-03
我怎样才能格式化它,使它看起来像这样:
03.10.2009
我找到了一个像这样呈现它的小部件,但验证不允许我输入的值。
我有一个带有 DateField 的表单。现有的日期值被格式化为如下所示:
2009-10-03
我怎样才能格式化它,使它看起来像这样:
03.10.2009
我找到了一个像这样呈现它的小部件,但验证不允许我输入的值。
所以对你来说最好的格式化解决方案是“。”
{{field.value.day|stringformat:"02d"}}.{{field.value.month|stringformat:"02d"}}.{{field.value.year}}
得到24.05.2010
我添加了 stringformat:"02d" 以不将25.5.2010作为输出值。
我发布了一个字段的完整代码以获得一个想法:
<input class="form-control" data-inputmask="'mask':'99.99.9999'" data-toggle="masked" name="{{field.html_name}}" placeholder="{{ field.label }}" {% if field.field.required %}required=""{% endif%} type="text" value="{{field.value.day|stringformat:"02d"}}.{{field.value.month|stringformat:"02d"}}.{{field.value.year}}" " >
我主要将这种格式用于更新(模型)表单(UpdateView 类)的现有实例上的日期值。
如果不满足格式,则提交更新表单时此解决方案可能会失败
这是通过将自定义本地设置添加到 settings.py 文件来完成的:最重要的部分是DATE_INPUT_FORMATS 元组
..
..
USE_L10N = True
..
DATE_INPUT_FORMATS = (
'%d.%m.%Y', '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.2006', '25.10.06'
'%d-%m-%Y', '%d/%m/%Y', '%d/%m/%y', # '25-10-2006', '25/10/2006', '25/10/06'
'%d %b %Y', # '25 Oct 2006',
'%d %B %Y', # '25 October 2006',
)
DATE_FORMAT = 'j F Y'
TIME_FORMAT = 'H:i'
DATETIME_FORMAT = 'j F Y H:i'
YEAR_MONTH_FORMAT = 'F Y'
MONTH_DAY_FORMAT = 'j F'
SHORT_DATE_FORMAT = 'j N Y'
SHORT_DATETIME_FORMAT = 'j N Y H:i'
FIRST_DAY_OF_WEEK = 1
最重要的:
因此,在这个元组中,第一个元素的选择很重要,因为它定义了更新表单上 datefield 现有值的格式
您也可以使用第一种格式在 UpdateViews 上应用 javascript 验证。
在 django 1.6 和 1.7 上测试过,不知道以前的版本
子类自定义字段如下:
class CustomDateField(forms.DateField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('input_formats', ("%d.%m.%Y",))
super(CustomDateField, self).__init__(*args, **kwargs)
您可以通过以下方式在模板中显示日期
{{ your_object.date_field.day }}.{{ your_object.date_field.month }}.{{ your_object.date_field.year }}