1

我试图在比赛中显示经过的时间。

class results(models.Model):
    race_id = models.ForeignKey(Race, on_delete=models.CASCADE)
    runner_id = models.ForeignKey(Runner, on_delete=models.CASCADE)
    race_start = models.DateTimeField()
    race_finish = models.DateTimeField(blank=True, null=True)
    obs = models.TextField(blank=True)
    def __str__(self):
        return self.race_id.race_cod+" - "+self.runner_id.name
    class Meta:
        verbose_name_plural = "Results"

看这里,我找到了以下指南:

两个 DateTimeFields 之间的 Django 模型经过的时间

Django:表示经过时间的最佳字段类型是什么?

不幸的是,那里提出的解决方案似乎有点复杂。

我也在.html视图页面中找到了这个解决方法

<div class="info-box-content">
  <span class="info-box-number">Time - {{ results.race_finish|timesince:results.race_start }}</span>
</div>

这个问题是超过 24 小时的所有内容都是 x 天,yy 小时 - 而我需要将持续时间显示为HH:mm

这里有什么提示吗?

4

2 回答 2

0

为此,我建议添加自定义模板过滤器或新模型属性。例如,如果您想将其添加到您的模型中:

class results(models.Model):
    ...
    race_start = models.DateTimeField()
    race_finish = models.DateTimeField(blank=True, null=True)
    @property
    def duration(self):
        if not (self.race_start and self.race_finish): return None
        a,b=self.race_start, self.race_finish
        return '%s:%s' % ((b-a).days*24 + (b-a).seconds//3600, (b-a).seconds%3600//60)

这是一个将其转换为类(在 django 之外)的示例,以展示它如何处理相隔 1 天 2 小时 17 分钟的两个比赛时间:

import datetime
class results:
    def __init__(self):
        self.race_start = datetime.datetime.now()
        self.race_finish = datetime.datetime.now() + datetime.timedelta(days=1, hours=2, minutes=17)
    @property
    def duration(self):
        if not (self.race_start and self.race_finish): return None
        a,b=self.race_start, self.race_finish
        return '%s:%s' % ((b-a).days*24 + (b-a).seconds//3600, (b-a).seconds%3600//60)

>>> r=results()
>>> r.duration
'26:17'

换句话说,在您的模板中,您可以只拥有Time - {{ results.duration }}并且应该显示:“ Time - 26:17”。

于 2020-02-17T21:34:20.087 回答
0

您是否尝试过使用内置标签?

{{ value|time:"H:i" }}

https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#time

于 2020-02-17T21:35:28.333 回答