Python Django日期字段的默认值格式

Python Django日期字段的默认值格式,python,django,Python,Django,我试图在Django模型中指定默认日期,例如: from datetime import date class A(models.Model): date = models.DateField(default=date.today()) 这是可行的,我可以在ModelForm中看到默认日期,但是当我将表单输入格式更改为%d-%m-%Y时,默认日期不会出现在字段中 我也试过: from datetime import date class A(models.Model): d

我试图在Django模型中指定默认日期,例如:

from datetime import date

class A(models.Model):
    date = models.DateField(default=date.today())
这是可行的,我可以在
ModelForm
中看到默认日期,但是当我将表单输入格式更改为
%d-%m-%Y
时,默认日期不会出现在字段中

我也试过:

from datetime import date

class A(models.Model):
    date = models.DateField(default=date.today().strftime('%d-%m-%Y'))

这也不行。有人能帮我吗?

您可以在Django项目设置中使用该设置,这将允许您的模型字段接受
date.today().strftime(“%d-%m-%Y”)
;但是,日期字段在数据库中存储为相同类型的本机列,而不是特定格式的字符串。存储数据和在表单、模板或DRF序列化程序中表示数据是有区别的。我真的建议保留数据库的默认格式,并通过使用设置为d-m-Y以您想要的格式显示数据,只要USE\u L10N设置为False,该设置将负责以该格式显示您的日期。

这里有两个问题:

  • DateField(default=today.today())
    将不起作用,因为此时函数将被急切地求值,因此默认值是该函数调用的结果。因此,在构造新对象时不会计算默认值,因此最终会有所不同;及
  • 日期字段的表示形式
    。现在,模型层不指定表示,它只指定如何在数据库中存储值,并定义模型上的函数
  • 我们可以通过传递对
    today
    函数的引用来解决第一个问题,如:

    from datetime import date
    
    class A(models.Model):
        date = models.DateField(default=date.today)    # no ()
    或以以下形式:

    # app/forms.py
    
    class AForm(ModelForm):
        date = DateField(input_formats=['%d-%m-%Y'])
        class Meta:
           model = A
    #app/forms.py
    类别A表格(模型表格):
    日期=日期字段(输入格式=[%d-%m-%Y'])
    类元:
    
    model=A
    如果要使用相同的格式进行显示和输入,则必须分别指定输入格式和格式(在小部件中)。比如说

    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
    )
    

    内容和表现形式之间存在差异。您不能在模型中设置表示形式,但可以根据模板中的某些fromat来呈现数据。此外,
    default=date.today()
    将不起作用,因为它将添加服务器启动的日期,因此如果服务器运行三天,它仍将使用该日期,不是在您构建模型的那天。因此,我如何设置默认日期并在默认情况下以格式“%d-%m-%Y”在表单中显示它?这是两个独立的问题。第一个是在模型层解决的,第二个是在模板层解决的(如果是表单的话,则是表单层)。但是在添加输入格式后,表单中的日期字段为空,而不是像以前那样显示默认的日期。@P.Rodoreda:您能用相关的视图/表单/模型(部分)编辑您的问题吗?
    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
    )