【问题标题】:How can I set a DateField format in django from the model?如何从模型中在 django 中设置 DateField 格式?
【发布时间】:2015-09-03 20:53:49
【问题描述】:

我正在创建一个 django 应用程序,但我遇到了下一个问题:当我想设置日期时会显示此错误:

ValidationError [u"'12/06/2012' value has an invalid date format. It must be in YYYY-MM-DD format."]

对于这个模型:

class ModelA(models.Model):

    date1 = models.DateField(null=True)
    date2 = models.DateField(null=True)

如何将 DateField 格式设置为%m/%d/%Y

无法识别选项"input_formats"

谢谢!

【问题讨论】:

    标签: python django format datefield


    【解决方案1】:

    input_formatsforms.DateField option,而不是 model.DateField 选项。你必须在你的表单中设置它,而不是在你的模型中。

    【讨论】:

    • 为了创建模型,我使用通用视图。如何更改模型中日期的格式?
    【解决方案2】:

    正如@bruno 在他的回答中提到的,input_formats 是一个表单字段,但是它可以用来控制从模型中保存的日期格式。

    settings.py 中设置DATE_INPUT_FORMATS 如下:

    DATE_INPUT_FORMATS = ['%d-%m-%Y']
    

    在您的表单中,您可以执行以下操作:

    class ClientDetailsForm(ModelForm):
        date_of_birth = DateField(input_formats=settings.DATE_INPUT_FORMATS)
        class Meta:
           model = ModelA
    

    【讨论】:

    • 这仅在USE_L10N 为 False 时有效。您可能还需要设置在模板中打印日期时使用的DATE_FORMAT
    • 无法从模型中设置。它仅适用于表单。
    • 为什么要使用设置?不能设置成同forms.py吗?
    • 这可能看起来很简单,但 settings.py 似乎无法从应用程序的文件夹中访问。我已经尝试了所有可能的方式来导入位于项目文件夹中的 settings.py。
    【解决方案3】:

    您还可以使用 LANGUAGE_CODE 来获取本地的正确日期格式。 LANGUAGE_CODE ='en-GB' 然后在settings.py 中添加DATE_INPUT_FORMATS = ['%d-%m-%Y', '%Y-%m-%d'],可以在需要时随时调用。

    date_birth = forms.DateField(label='Date of birth', widget=forms.SelectDateWidget(years=YEAR_CHOICES, input_formats= DATE_INPUT_FORMATS))
    

    【讨论】:

    • 似乎“input_formats”不再是有效的 kwarg。我遇到了这个错误:TypeError: SelectDateWidget.__init__() got an unexpected keyword argument 'input_formats'
    【解决方案4】:

    在settings.py中,插入:

    USE_L10N = False
    
    DATE_INPUT_FORMATS = ['%d/%m/%Y']  
    
    • DATE_INPUT_FORMATS 的数据类型必须是列表,包含格式为字符串。
    • %d/%m/%Y 只是我选择的格式。

    截至最近(2022 年 1 月),settings.py 默认不包含USE_L10NDATE_INPUT_FORMATS 也不包含,但我猜这个预计不会存在)。
    看起来,虽然USE_L10N 默认情况下不存在,它不仅存在于某个地方,而且还设置为 True,因为单独设置 DATE_INPUT_FORMATS(即不将 USE_L10N 明确设为 False)将无法解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-26
      • 2012-02-05
      • 1970-01-01
      • 2012-06-13
      • 2019-04-25
      • 2022-10-25
      • 2021-05-22
      • 1970-01-01
      相关资源
      最近更新 更多