Django:如何格式的一个DateField的日期表示?
-
19-09-2019 - |
题
我有一个形式与DateField.现有的日期的价值是格式呈现这样的:
2009-10-03
我怎么能格式,因此,它是这样的:
03.10.2009
我发现了一个部件,这使它如此,但是验证并不允许值我进入。
解决方案
要显示初始字段值正确地格式化,使用 DateInput
部件。要定制验证,可以使用的 input_formats
DateField
关键字参数。
为什么需要两个format
和input_formats
?
format
- ,其中该字段的初始值将被显示的格式。请参阅此处。
input_formats
- 用来试图将字符串转换为一个有效的 datetime.date 强>对象的格式列表。请参阅此处。
其他提示
方法1:手册的格式呈现,但失败datefield格式验证
所以最好格式化解决方案对于你将被"。"
{{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类)。
这个解决方案可能会失败时提交更新的形式,如果它不会满足的格式
方法2:(更佳)自动化领域值的格式+正确验证的使用设置
这是通过增加自定义的地方设置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
最重要的是:
- 验证的datefields做插入和更新与所有格式存在 DATE_INPUT_FORMATS tuple
- 在updateView,日场将会呈现的使用 第一格式的DATE_INPUT_FORMATS元组 (我的意思是使用 DATE_INPUT_FORMATS[0] =='%d。%m。%Y')
所以选择的第一个元素是很重要的,在这tuple因为它规定格式的现有价值的datefield在更新形式
你可以申请javascript验证UpdateViews使用这一格式。
测试django1.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 }}
不隶属于 StackOverflow