当我使用 django-tempus-dominus TimePicker 小部件选择时间后提交表单时,我没有收到错误,但表单没有保存到数据库中,也没有显示在管理页面中。我收到一个视觉浏览器指示,表明我的 TimeFields 有问题。我可以从管理页面成功创建一个新表单,并且只在从我的表单页面提交时看到问题。我不确定这是否与我的 forms.py 中的 TimePicker 小部件的“格式”有关,是否与我的 settings.py 中的 TIME_INPUT_FORMATS 或其他问题有关。
如果我将 DateTimeField 与 DateTimePicker 小部件一起用于 start_time 和 end_time,并将小部件中的“格式”更改为“YYYY/MM/DD hh:mm: A”,而不是使用带有 TimePicker 小部件的 TimeField,则表单有效正确,提交后,可以从管理页面查看。
在我的 settings.py 中:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/Kentucky/Monticello'
DATETIME_INPUT_FORMATS = ['%Y/%m/%d %I:%M %p', ]
DATE_INPUT_FORMATS = ['%Y/%m/%d', ]
TIME_INPUT_FORMATS = ['%I:%M %p', ]
USE_I18N = True
USE_L10N = False
USE_TZ = True
在我的models.py中:
start_time = models.TimeField(
verbose_name="Start Time", help_text="Time the issue first occurred.")
在我的 forms.py 中:
from django import forms
from tempus_dominus.widgets import DatePicker, TimePicker
from .models import DMDCTracker
class DMDCTrackerForm(forms.ModelForm):
class Meta:
model = DMDCTracker
fields = ["date_issue_occurred", "start_time", "end_time", "number_of_csrs", "agents_affected", "ticket_number", "workstation_id",
"issue_location", "vpn_name", "server_name", "issue_category", "issue_description"]
widgets = {
'date_issue_occurred': DatePicker(
options={
'format': 'YYYY/MM/DD',
},
attrs={
'append': 'fa fa-calendar',
'icon_toggle': True,
},
),
'start_time': TimePicker(
options={
'format': 'hh:mm A'
},
attrs={
'append': 'fa fa-clock-o',
'icon_toggle': True,
},
),
'end_time': TimePicker(
options={
'format': 'hh:mm A'
},
attrs={
'append': 'fa fa-clock-o',
'icon_toggle': True,
},
),
}
在我的 tracker_form.html 中:
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<form method="POST" action="." class="tracker-form">
{% csrf_token %}
<div class="container">
<h2 class="mt-2 text-center">Track a New Issue</h2>
<hr class="mt-0 mb-4">
{{ form.date_issue_occurred|as_crispy_field }}
<div class="row">
<div class="col-6">
{{ form.start_time|as_crispy_field }}
</div>
<div class="col-6">
{{ form.end_time|as_crispy_field }}
</div>
</div>
浏览器中视觉指示的屏幕截图: