【问题标题】:django how to format date to DD/MM/YYYYdjango 如何将日期格式化为 DD/MM/YYYY
【发布时间】:2020-12-17 19:51:36
【问题描述】:

django 在这种情况下如何将日期格式化为 DD/MM/YYYY:

class Invoice(models.Model):
    date = models.DateField(default=timezone.now)

class InvoiceForm(ModelForm):
    class Meta:
        model = Invoice
        fields = "__all__"

【问题讨论】:

  • 模型不是关于如何格式化事物。模型是关于存储东西的。所以基本上一个模型没有“格式”(或者至少没有一个“外部世界”)。您可以将其格式化为模板、表单等。
  • 如前所述,您在模板(或模板使用的设置)和表单中指定格式(尽管这些也将设置作为默认格式)。
  • 请按照提问的格式。在旁注中,阅读here,如果您想了解更多关于在数据库中格式化日期(或其他任何内容)的信息,特别是关于日期时间字段的部分和here 用于python 中的日期

标签: django django-models django-forms django-views


【解决方案1】:

Model 不是关于您如何向客户展示数据,而是关于您如何在数据库中存储数据。

如果您向用户展示数据,则取决于处于活动状态的设置。例如,如果USE_L10N setting [Django-doc] 处于活动状态,它将尝试确定用户的语言环境,并根据该格式确定日期。这意味着德国用户将看到与美国用户不同的日期格式。

如果USE_L10N 设置为False,则表单字段将使用DATE_INPUT_FORMATS setting [Django-doc] 中的第一项。默认情况下是:

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

所以它将首先格式化年、月和日期,例如2020-08-28。因此,您可以指定一个不同的元素(第一个)来为所有具有DateField fields [Django-doc]Forms 更改此设置。

如果要指定一次性字段,可以使用DateInput 小部件的format=… parameter [Django-doc] 例如:

from django import forms

class InvoiceForm(ModelForm):
    date = forms.DateField(widget=forms.DateInput(format='%d/%m%Y'))

    class Meta:
        model = Invoice
        fields = '__all__'

那么你还应该在DATE_INPUT_FORMATS设置中包含格式,并且比%m/%d/%Y%m/%d/%y等“重叠”格式具有更高的优先级,以确保该值也可以被解析。

您还可以通过指定 input_formats=… parameter [Django-doc] 在表单字段中提供一次性输入格式列表

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-11-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
相关资源
最近更新 更多