ModelForm 中的 Django datepicker 使用实例显示不正确的日期

Django datepicker in ModelForm shows incorrect date with instance

我在 forms.py 中有一个 ModelForm 作为 -

class MyForm(forms.ModelForm):
from_date = forms.DateField(input_formats=['%d-%m-%Y'],
                           label='From Date',
                           widget=forms.TextInput(
                                   attrs={'placeholder': 'Select a date', 'class': 'datepicker'})
                           )
to_date = forms.DateField(input_formats=['%d-%m-%Y'],
                           label='To Date',
                           widget=forms.TextInput(
                                   attrs={'placeholder': 'Select a date', 'class': 'datepicker'})
                           )

class Meta:
    model = MyModel
    fields = ['from_date', 'to_date', 'reason']

以及相关的js -

<script src="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/4.5.2/flatpickr.min.js"></script>
$('.datepicker').flatpickr({
    dateFormat: "d-m-Y",
    allowInput:true,
});

使用创建表单,一切正常,对象创建成功。但是,在编辑对象时,表单上显示的初始日期不正确(可能 %Y-%m-%d 被解析为 %d-%m-%Y)。如何在更新表单中显示正确的日期?我尝试在 __init__ 中设置初始值,但没有成功。

您应该使用 DateInput,而不是 TextInput,以及 format 属性。

from_date = forms.DateField(input_formats=['%d-%m-%Y'],
                           label='From Date',
                           widget=forms.DateInput(
                                   format='%d-%m-%Y',
                                   attrs={'placeholder': 'Select a date', 'class': 'datepicker'})
                           )

(记住,字段负责输入校验,widget负责显示。)