我正在尝试在Django模型中指定默认日期,例如:
from datetime import date
class A(models.Model):
date = models.DateField(default=date.today())
这可行,我可以在ModelForm中看到默认日期,但是当我将input_format格式更改为'%d-%m-%Y'时,默认日期永远不会出现在字段中。
我也尝试过:
from datetime import date
class A(models.Model):
date = models.DateField(default=date.today().strftime('%d-%m-%Y'))
这也不起作用。谁能帮我吗?
答案 0 :(得分:1)
您可以在Django项目设置中使用DATE_INPUT_FORMATS设置,这将使您的模型字段接受date.today().strftime('%d-%m-%Y')
;但是, DateField 作为相同类型的本机列(而不是特定格式的字符串)存储在数据库中。存储数据和以表单,模板或DRF序列化器表示数据之间存在区别。我真的建议保留数据库的默认格式,并通过使用DATE_FORMAT设置为 dmY 来以所需的格式显示数据,这样可以尽可能长时间地以该格式显示日期因为 USE_L10N 设置为False。
答案 1 :(得分:0)
这里有两个问题:
DateField(default=today.today())
将不起作用,因为此后将急切地评估该函数,因此默认值就是该函数调用的结果。结果,构造新对象时不会计算默认值 ,因此最终会有所不同。和DateField
的表示形式。现在, model 层没有指定一个表示,它仅指定如何在数据库中存储值,并定义模型上的功能。 / li>
我们可以通过将 reference 传递给today
函数来解决第一个问题,例如:
from datetime import date
class A(models.Model):
date = models.DateField(default=date.today) # no ()
对于表示形式,您应在模板中指定格式,例如使用date
template filter [Django-doc],例如:
<!-- template.html -->
{{ some_a.date|date:'d-m-Y' }}
或采用以下形式:
# app/forms.py
class AForm(ModelForm):
date = DateField(input_formats=['%d-%m-%Y'])
class Meta:
model = A
答案 2 :(得分:0)
如果要使用相同的格式进行显示和输入,则必须分别指定input_formats和format(在小部件中)。例如
class OrderForm(forms.ModelForm):
deadline = forms.DateTimeField(
input_formats=['%d/%m/%Y %I:%M %p', ], # input format
widget=forms.DateTimeInput(format="%d/%m/%Y %I:%M %p"), # initial display format
)