验证日期字段

时间:2019-01-08 20:16:10

标签: javascript django bootstrap-4

我在Django modelform小部件和jQuery datepicker中具有覆盖日期格式, 给定错误,该字段无效

CRLF

jQuery日期选择器:

message-header

我想找到我做错的错误,它给出了验证错误

1 个答案:

答案 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}