Hel*_*nar 9 django time django-models
问候,我正在尝试实现一个只包含HH:MM(即16:46)格式的TimeField模型,我知道可以格式化常规的Python时间对象,但我对如何使用Django管理它感到很遗憾.
干杯
小智 8
Django小部件可以用来轻松实现这一点.
from django import forms
class timeSlotForm(forms.Form):
from_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M'))
Run Code Online (Sandbox Code Playgroud)
DateTime字段也将始终存储秒数; 但是,您可以使用time过滤器轻松告诉模板只显示小时和分钟:
{{ value|time:"H:M" }}
Run Code Online (Sandbox Code Playgroud)
其中"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()
Run Code Online (Sandbox Code Playgroud)
(注意:这是一个丑陋且未经测试的代码,只是为了提出这个想法!)
最后,您应该注意到管理员仍会在字段中显示秒数.
但是,它应该不是一个大问题,因为管理员应该只被一种可以被指示不使用该部分字段的用户使用.
如果您还要修补管理员,您仍然可以将自己的小部件分配给表单,从而让管理员使用它.当然,这意味着需要付出额外的努力.
小智 5
所以我认为提议和接受的解决方案不是最佳的,因为:
datetime.widget = forms.SplitDateTimeWidget(time_format=('%H:%M'))
Run Code Online (Sandbox Code Playgroud)
在我的情况下,对于 SplitDateTimeField,但对于您来说,只将其更改为 TimeWidget。
希望它也能帮助其他人。