我有一个django编辑表单,该表单具有来自模型的许多字段,包括一些日期字段,对于合适的格式,我使用了DateInput小部件。不幸的是,当我们编辑对象时,所有其他字段已经填充了现有数据,但日期已填充。日期处于其初始状态(dd / mm / yyyy),由于是必需的,因此即使用户不想更改日期,用户也必须在每次要编辑对象时都重新输入日期。
有人知道如何在这些日期字段中预填充日期数据吗?
forms.py:
class DateInput(forms.DateInput):
input_type = 'date'
input_formats = ('%d-%m-%Y')
[...]
date_sinistre = forms.DateField(widget=DateInput, label='Date sinistre')
date_effet = forms.DateField(widget=DateInput, label='Date effet')
date_echeance = forms.DateField(widget=DateInput, label='Date échéance')
edit_object.html:
<div class='row border border-primary rounded m-1 border-3'>
<div class='col-md-4 p-0 pl-2 pr-2 justify-content-center align-self-center'>
<strong>DATE DE SINISTRE:</strong>
</div>
<div class='col-md-8 p-0 pl-2 pr-0 justify-content-center align-self-center'>
{{ dossierForm.date_sinistre|as_crispy_field }}
</div>
</div>
<div class='row border border-primary rounded m-1 border-3'>
<div class='col-md-4 p-0 pl-2 pr-2 justify-content-center align-self-center'>
<strong>DATE EFFET:</strong>
</div>
<div class='col-md-8 p-0 pl-2 pr-0 justify-content-center align-self-center'>
{{ dossierForm.date_effet|as_crispy_field }}
</div>
</div>
<div class='row border border-primary rounded m-1 border-3'>
<div class='col-md-4 p-0 pl-2 pr-2 justify-content-center align-self-center'>
<strong>DATE ÉCHÉANCE:</strong>
</div>
<div class='col-md-8 p-0 pl-2 pr-0 justify-content-center align-self-center'>
{{ dossierForm.date_echeance|as_crispy_field }}
</div>
</div>
PS:尽管我将格式指定为dd-mm-yy,但该小部件仍将日期显示为MM-DD-YYYY。
答案 0 :(得分:0)
基于DateInput
and DateTimeBaseInput
[GitHub]的源代码,您需要为构造函数指定format=…
parameter [Django-doc]:
class DateTimeBaseInput(TextInput): format_key = '' supports_microseconds = False def __init__(self, attrs=None, format=None): super().__init__(attrs) self.format = format or None def format_value(self, value): return formats.localize_input(value, self.format or formats.get_format(self.format_key)[0]) class DateInput(DateTimeBaseInput): format_key = 'DATE_INPUT_FORMATS' template_name = 'django/forms/widgets/date.html'
因此,您可以通过以下方式实现此目标:
# …
date_sinistre = forms.DateField(widget=forms.DateInput(format='%d-%m-%Y'), label='Date sinistre')
date_effet = forms.DateField(widget=forms.DateInput(format='%d-%m-%Y'), label='Date effet')
date_echeance = forms.DateField(widget=forms.DateInput(format='%d-%m-%Y'), label='Date échéance')
您还应该更改DATE_INPUT_FORMAT
setting [Django-doc]并将'%d-%m-%Y'
格式添加为可接受的格式之一。
答案 1 :(得分:0)
您的DateInput生成元素<input type = "date">
,但是这种元素的格式为'%Y-%m-%d'
。
实际上,检查正确的HTML元素应该是这样的:
<input type="date" name="date" value="2020-04-07" id="id_date">
由于您要传递其他格式的日期,因此初始值将被忽略。
以下应该可以工作
class DateInput(forms.DateInput):
input_type = 'date'
input_formats = ('%Y-%m-%d')
[...]
date_sinistre = forms.DateField(widget=DateInput, label='Date sinistre')
date_effet = forms.DateField(widget=DateInput, label='Date effet')
date_echeance = forms.DateField(widget=DateInput, label='Date échéance')