无法以

时间:2017-08-22 22:31:17

标签: django django-forms

我有:date_due = models.DateField(null=True, blank=True)

以及发生上述情况的类的相关模型表单。所有其他值在模型表单中都可以正常验证,但是当我以2017年8月25日格式输入日期时,我收到一条错误消息:"输入有效日期"。在settings.py中,我设置了USE_L10N = True(并设置了USE_L18N = False以确保仅观察到USE_L10N设置。)

the documentation中说:

  

在日期输入数据时将接受的格式列表   领域。将使用第一个有效格式按顺序尝试格式。注意   这些格式字符串使用Python的datetime模块语法,而不是   格式化日期模板过滤器中的字符串。

并举例说明。使用给出的示例,在我的设置中,我放置了:

DATE_INPUT_FORMATS = [
    '%B %d %Y', '%B %d, %Y',            # 'October 25 2006', 'October 25, 2006'
    '%b %d %Y', '%b %d, %Y',            # 'Oct 25 2006', 'Oct 25, 2006'
    '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
    '%d %B %Y', '%d %B, %Y',            # '25 October 2006', '25 October, 2006'
    '%d %b %Y', '%d %b, %Y'             # '25 Oct 2006', '25 Oct, 2006'
]

然而,在注释中所说的Format Localization documentation (Locale aware input in forms)中:

  

Django使用不同的格式将数据显示给它用于解析数据的格式。最值得注意的是,解析日期的格式不能使用%a(缩写为工作日名称),%A(完整工作日名称),%b(缩写月份名称),%B(完整月份名称)或%p(AM) / PM)。

文档的这两个部分似乎存在冲突,我倾向于认为后者是正确的,因为它没有遵守我指定的DATE_INPUT_FORMATS。如何在表单中验证日期:2017年8月25日?

进一步尝试: 我将USE_L10N设置为False并将USE_I18N设置为True并允许我的表单接受2017年8月25日格式化的日期,但是,如果我现在尝试使用TIME_INPUT_FORMATS并使用文档中的示例格式(并将USE_L10N设置回True),我的表格不会以格式验证时间:下午5:00。此外,将USE_L10N设置回True然后导致日期和时间不通过表单验证。看起来DATE_INPUT_FORMATS和TIME_INPUT_FORMATS似乎没有按照文档中的说明工作。

进一步尝试: 我从设置中将DATE_INPUT_FORMATS导入表单,然后将其放在 init 中:     self.fields [' date_due'] .input_formats =(DATE_INPUT_FORMATS) 由于USE_L10N仍设置为True且USE_I18N为False,现在可以使用以下格式:2017年8月25日使用上面显示的相同DATE_INPUT_FORMATS验证日期。然而,当我随后尝试相同的事情(将TIME_INPUT_FORMATS导入表单)然后执行此操作时:

self.fields['time_due'].input_formats = (TIME_INPUT_FORMATS)

当表单验证时间时,STILL会出错。以下是时间格式:

TIME_INPUT_FORMATS = [
    '%-I:%M %p',    # '2:30 AM/PM'
    '%-I:%M%p'      # '2:30AM/PM'
]

重申一下,Django似乎只是忽略了所谓的全局DATE_INPUT_FORMATSTIME_INPUT_FORMATS设置变量。我不必在 init 中的每个表单上设置这些。

0 个答案:

没有答案