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] 在表单字段中提供一次性输入格式列表