我在Django modelform小部件和jQuery datepicker中具有覆盖日期格式, 给定错误,该字段无效
CRLF
jQuery日期选择器:
message-header
我想找到我做错的错误,它给出了验证错误
答案 0 :(得分:0)
有时本地化可能会有些棘手。通常,您会在设置中添加DATE_INPUT_FORMATS。在日期字段中输入数据表示接受此列表中的格式,表示添加
DATE_INPUT_FORMATS = [
'%d-%m-%Y'
]
对您的设置应该可以解决您的问题。但这有时在USE_L10N
设置为True
时可能会有些棘手,因为在这种情况下,由区域设置指定的格式具有更高的优先级,并将被应用。因此,我建议您不要在jQuery datepicker中对日期格式进行硬编码,而应使用默认值并从DATE_INPUT_FORMATS获取日期格式。这样的事情应该可以解决问题:
from django.utils import formats
# First date format in default (English) is '%Y-%m-%d', most European languages '%d.%m.%Y' etc.
date_format = formats.get_format("DATE_INPUT_FORMATS")[0]
date_format = date_format.split()[0].replace('%Y', 'YY').replace('%d', 'dd').replace('%m', 'mm')
并使用它作为模板:
<script>
$( function() {
$( ".vdate" ).datepicker({
dateFormat: "{{ date_format }}"
});
} );
</script>
这样,日期格式将与格式优先级匹配。最好在自己的context processor中包含日期格式。现在,它将包含在所有模板的上下文中。
my_context_processor.py
from django.utils import formats
def common_context(request):
''' Common variables used in templates '''
date_format = formats.get_format("DATE_INPUT_FORMATS")[0]
date_format = date_format.split()[0].replace('%Y', 'YYYY').replace('%d', 'dd').replace('%m', 'mm')
return {'date_format ': date_format}