没有秒的Django TimeField模型

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)


rob*_*rob 6

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。

希望它也能帮助其他人。