django - Django Forms DateInput 小部件未填充
问题描述
我有一个 django 编辑表单,其中包含来自模型的许多字段,包括一些日期字段,对于合适的格式,我使用了 DateInput 小部件。不幸的是,当我们编辑对象时,所有其他字段都已经填充了现有数据,但日期除外。日期处于其初始状态 (dd/mm/yyyy),由于它们是必需的,因此用户每次想要编辑对象时都必须重新输入日期,即使他们不想更改日期。
有人知道如何在这些日期字段中预填充日期数据吗?
表格.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')
编辑对象.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。
解决方案
DateInput
根据和DateTimeBaseInput
[GitHub]的源码,需要给构造函数指定参数[Django-doc]:format=…
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
设置 [Django-doc]并将您的'%d-%m-%Y'
格式添加为可接受的格式之一。
推荐阅读
- php - 在树枝中返回 acf 图像 src
- r - 输入更新后编辑闪亮数据表中的数据
- python - 有没有办法在树莓派中使用 python 脚本获取 roscore 字符串?
- mysql - 如何通过 Brew 在 Mac 上安装 MySQL 5.7.23
- javascript - react-native-navigation:将自定义标题设置为除一个以外的所有屏幕
- javascript - 如何在 vue-multiselect 中没有标签?
- macos - 另一台机器上基于 Apple 开发证书的应用程序
- header - Haproxy 动态后端匹配请求头
- python - 如何使用 django-modeltranslation 向模板添加翻译字段?
- amazon-web-services - 我们可以在 Route 53 AWS DNS 服务中创建多少个子域?