没有秒的Django TimeField模型

时间:2009-08-06 17:21:15

标签: django django-models time

问候, 我正在尝试实现一个只包含HH:MM(即16:46)格式的TimeField模型,我知道可以格式化常规的Python时间对象,但我对如何使用Django来管理它感到很遗憾。

干杯

7 个答案:

答案 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。