【发布时间】:2011-06-23 12:27:26
【问题描述】:
我有以下型号:
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 查询相比是相当无效的.
【问题讨论】:
标签: sql django orm django-queryset