默认情况下,Django 将日期/时间显示为类似May 13th, 2010, 4:01 p.m.
. 我还配置了一个 jQuery日历插件(我使用dateFormat: "MM d, yy", timeFormat: "h:mm tt"
并修改了 JavaScript 源代码以输出a.m.
andp.m.
而不是AM
and PM
)来以相同的格式显示日期/时间。
但是表单验证(默认情况下)采用以下形式
DATETIME_INPUT_FORMATS = (
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%Y-%m-%d', # '2006-10-25'
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
'%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200'
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
'%m/%d/%Y', # '10/25/2006'
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
'%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
'%m/%d/%y %H:%M', # '10/25/06 14:30'
'%m/%d/%y', # '10/25/06'
)
我尝试添加'%B %d, %Y, %I:%M %p'
,但我不确定是否%p
考虑了a.m.
and p.m.
(注意字母后面的句点)。这是 Python 关于日期/时间格式的文档的链接。
你们是怎么做到的?您是坚持使用 Django 的默认(丑陋)日期/时间格式,还是在检查之前以某种方式转换时间form.is_valid()
(无论是在 JavaScript 还是 Python 中)?
编辑@Thomas Orozco
我写了一个新的表单域,叫做CustomDateTimeField
:
class CustomDateTimeField(forms.DateTimeField):
def strptime(self, value, format):
return datetime.datetime.strptime(value.replace("a.m.", "AM").replace("p.m.", "PM"), "%B %d, %Y, %I:%M %p")
但是,我的表单ModelForm
使用fields
在class Meta
. 这就是我的意思:
def order_edit(request, pk):
order = Order.objects.get(pk=pk)
if foo:
include_fields = (
'fa_date',
'sa_date',
)
else:
include_fields = (
'sa_date',
)
class OrderDetailForm(forms.ModelForm):
class Meta:
model = Order
fields = include_fields
if request.method == 'POST':
form = OrderDetailForm(data=request.POST, instance=order)
whereOrder.sa_date
和Order.fa_date
are both models.DateTimeField
。而且我认为我只能使用DateTimeInput
for ModelForm
's widgets
。那么我将如何告诉表单CustomDateTimeField
用于OrderEditForm
?我是否需要通过添加额外的论点__init__
并手动重新定义类似的字段self.fields['fa_date'] = CustomDateTimeField(...)
?