django如何将日期格式设置为DD/MM/YYYY

pxyaymoc  于 2023-01-03  发布在  Go
关注(0)|答案(1)|浏览(96)

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

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

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

vwkv1x7d1#

Model不是关于如何向客户呈现数据,而是关于如何在数据库中存储数据。
如果你向用户显示数据,这取决于激活的设置。例如,如果激活了**USE_L10Nsetting [Django-doc],它将尝试确定用户的区域设置,并基于该格式确定日期。这意味着德国用户将看到与美国用户不同的日期格式。
如果USE_L10N被设置为False,表单域将使用
DATE_INPUT_FORMATS**设置[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.因此你可以指定一个不同的元素(第一个)来改变所有Form的**DateField字段[Django-doc].
如果你想指定一个一次性字段,你可以使用DateInput小部件的
format=…**参数[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=…**参数[Django-doc]在表单域中提供一个一次性的输入格式列表。

相关问题