У меня есть следующая модель:
class UptimeManager(models.Manager):
def with_length(self):
"""Get querySet of uptimes sorted by length including the current one. """
extra_length = Uptime.objects.extra(select={'length':
"""
SELECT
IF (end is null,
timestampdiff(second,begin,now()),
timestampdiff(second,begin,end))
FROM content_uptime c
WHERE content_uptime.id = c.id
"""
})
return extra_length
class Uptime(models.Model):
begin = models.DateTimeField('beginning')
end = models.DateTimeField('end', null=True) I call
host = models.ForeignKey("Host")
objects = UptimeManager()
...
тогда я звоню Uptime.objects.with_length().order_by('-length')[:10]
, чтобы получить список самых продолжительных простоев.
Но length
в шаблоне имеет целочисленный тип. Как изменить мой код, так как длина объекта, возвращаемого менеджером, будет доступна в шаблоне как timedelta
объект?
Я почти мог бы сделать это, возвращая список и конвертируя количество секунд в timedelta
объекты, но затем я должен выполнить сортировку, фильтрацию и т. Д. В моем коде Python, что довольно неэффективно по сравнению с одним хорошо выполненным SQL-запросом. .