问候, 我正在尝试实现一个只包含HH:MM(即16:46)格式的TimeField模型,我知道可以格式化常规的Python时间对象,但我对如何使用Django来管理它感到很遗憾。
干杯
答案 0 :(得分:6)
DateTime fields将始终存储秒数;但是,您可以使用time
过滤器轻松告诉模板只显示小时和分钟:
{{ value|time:"H:M" }}
其中“value”是包含datetime字段的变量。
当然,你也可以采取其他技巧,比如在保存的同时减少场上的秒数;它只需要对处理表单的视图中的代码进行一些小的更改,就可以执行以下操作:
if form.is_valid():
instance = form.save(commit=False)
instance.nosecs = instance.nosecs.strptime(instance.nosecs.strftime("%H:%M"), "%H:%M")
instance.save()
(注意:这是一个丑陋且未经测试的代码,只是为了提出这个想法!)
最后,您应该注意管理员仍会在字段中显示秒数
但是,这不应该是一个大问题,因为管理员应该只被一种用户使用,可以指示他们不要使用该部分的字段。
如果您还要修补管理员,您仍然可以将自己的小部件分配给表单,从而让管理员使用它。当然,这意味着需要付出额外的努力。
答案 1 :(得分:5)
可以使用Django小部件轻松实现此目的。
from django import forms
class timeSlotForm(forms.Form):
from_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M'))
答案 2 :(得分:4)
所以我认为建议和接受的解决方案不是最佳的,因为:
datetime.widget = forms.SplitDateTimeWidget(time_format=('%H:%M'))
对于我的情况下的SplitDateTimeField,但是只将它更改为TimeWidget。
希望它也可以帮助其他人。
答案 3 :(得分:2)
TimeField模型
模板中的
显示
{{ value|time:"H:i" }}
不显示
{{ value|time:"H:M" }}
Django 1.4.1
答案 4 :(得分:1)
对于ModelForm
,您可以轻松添加这样的小部件,以避免显示秒数(只显示hh:mm):
class MyCreateForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('time_in', 'time_out', )
widgets = {
'time_in': forms.TimeInput(format='%H:%M'),
'time_out': forms.TimeInput(format='%H:%M'),
}
答案 5 :(得分:0)
在Django 1.9上,以下格式应该有效:
{{ yourData.value|time:"H:i" }}
Django有一整套模板标签和过滤器。
关于这个的Django 1.9文档是:
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#time
答案 6 :(得分:0)
您至少可以使用__str__
在模型的datetime.time.isoformat(timespec='minutes')
方法中修改输出,如下所示:
def __str__(self):
return self.value.isoformat(timespec='minutes')
现在该值在管理页面中显示为HH:MM。