Django:表单小部件不接受 bootstrapdatetimepicker 提供的日期格式
Django: Form widget not accepting date format provided by bootstrapdatetimepicker
我有以下问题:我有一个 django 表单,它使用 'bootstrapdatetimepicker' 小部件作为日期时间字段。但是,当我尝试 post 表单时,它会抛出 'format is invalid' 错误。
我正在使用本地(荷兰语)时间格式,但我在 forms.py 代码中都包含了这种新格式(见下文)
class Meta:
model = Quotation
fields = [
'full_name',
'organisation',
'address',
'date',
'type',
'description',
'budget',
]
widgets = {'date': DateTimeInput(
attrs={'id': 'datetimepicker1'},
format='%d-%m-%Y %H:%M:%S')}
并且在模板中,
<div class="col-md-12 speaker-form" id="offerte">
{% csrf_token %}
{% crispy form %}
</div>
<script>
$(function () {
$('#datetimepicker1').datetimepicker({
format:'DD-MM-YYYY HH:mm:ss',
defaultDate: new Date(),
icons: {
up: "fa fa-chevron-circle-up",
down: "fa fa-chevron-circle-down",
next: 'fa fa-chevron-circle-right',
previous: 'fa fa-chevron-circle-left',
}
});
});
</script>
有谁知道我做错了什么?为什么我在 Python 和 Javascript 代码中的 'format' 覆盖不能正常工作?
JS 库和 DateTimeInputField 似乎已正确配置为允许新的日期时间格式,但模型无法验证新的日期时间格式。因此它不会保存数据。
如果这是正确的,可以修改 settings.py
以允许不同的输入格式。
确保 USE_L10N = False
否则它将覆盖下面列出的自定义格式。
将以下内容添加到 settings.py
的底部:
from django.conf.global_settings import DATETIME_INPUT_FORMATS, DATE_INPUT_FORMATS
DATE_INPUT_FORMATS += ("%d-%m-%Y",)
DATETIME_INPUT_FORMATS += ("%d-%m-%Y %H:%M:%S",)
我遇到了同样的问题,我通过在 ModelForm 中定义字段解决了这个问题:
date = forms.DateTimeField(input_formats=['%d-%m-%Y %H:%M:%S']
class Meta:
model = Quotation
fields = [
'full_name',
'organisation',
'address',
'date',
'type',
'description',
'budget',
]
def __init__(self, *args, **kwargs):
super(YourModelName, self).__init__(*args, **kwargs)
self.fields['date'].widget.attrs.update({'class': 'form-control', 'id': 'm_datetimepicker_1'})
同时将您的 javascript 格式修改为 'dd-mm-yyyy hh:ii:ss'
我有以下问题:我有一个 django 表单,它使用 'bootstrapdatetimepicker' 小部件作为日期时间字段。但是,当我尝试 post 表单时,它会抛出 'format is invalid' 错误。
我正在使用本地(荷兰语)时间格式,但我在 forms.py 代码中都包含了这种新格式(见下文)
class Meta:
model = Quotation
fields = [
'full_name',
'organisation',
'address',
'date',
'type',
'description',
'budget',
]
widgets = {'date': DateTimeInput(
attrs={'id': 'datetimepicker1'},
format='%d-%m-%Y %H:%M:%S')}
并且在模板中,
<div class="col-md-12 speaker-form" id="offerte">
{% csrf_token %}
{% crispy form %}
</div>
<script>
$(function () {
$('#datetimepicker1').datetimepicker({
format:'DD-MM-YYYY HH:mm:ss',
defaultDate: new Date(),
icons: {
up: "fa fa-chevron-circle-up",
down: "fa fa-chevron-circle-down",
next: 'fa fa-chevron-circle-right',
previous: 'fa fa-chevron-circle-left',
}
});
});
</script>
有谁知道我做错了什么?为什么我在 Python 和 Javascript 代码中的 'format' 覆盖不能正常工作?
JS 库和 DateTimeInputField 似乎已正确配置为允许新的日期时间格式,但模型无法验证新的日期时间格式。因此它不会保存数据。
如果这是正确的,可以修改 settings.py
以允许不同的输入格式。
确保 USE_L10N = False
否则它将覆盖下面列出的自定义格式。
将以下内容添加到 settings.py
的底部:
from django.conf.global_settings import DATETIME_INPUT_FORMATS, DATE_INPUT_FORMATS
DATE_INPUT_FORMATS += ("%d-%m-%Y",)
DATETIME_INPUT_FORMATS += ("%d-%m-%Y %H:%M:%S",)
我遇到了同样的问题,我通过在 ModelForm 中定义字段解决了这个问题:
date = forms.DateTimeField(input_formats=['%d-%m-%Y %H:%M:%S']
class Meta:
model = Quotation
fields = [
'full_name',
'organisation',
'address',
'date',
'type',
'description',
'budget',
]
def __init__(self, *args, **kwargs):
super(YourModelName, self).__init__(*args, **kwargs)
self.fields['date'].widget.attrs.update({'class': 'form-control', 'id': 'm_datetimepicker_1'})
同时将您的 javascript 格式修改为 'dd-mm-yyyy hh:ii:ss'