计算Django的平均年龄

时间:2010-03-02 16:51:26

标签: mysql django datetime aggregate

我需要找出物品的平均年龄(按各种标准分组,但似乎不是问题)。但是我没有找到如何使用Django(在MySQL之上)有效地在DateTimeField上创建聚合。

Item.objects.all.aggregate(Avg('created'))似乎产生了绝对的虚假价值(例如20081988007238.133)并使用Item.objects.all.extra(...)我找不到如何聚合的方式。

当然我可以手动创建SQL查询(类似SELECT AVG(UNIX_TIMESTAMP(created)) FROM items_item),但我更愿意避免在应用程序中使用MySQL特定代码。

仅供参考,我用于测试的样本模型:

class Item(models.Model):
    name = models.CharField(max_length = 255)
    created = models.DateTimeField()

1 个答案:

答案 0 :(得分:0)

我认为没有其他方法可以使用extra方法。它应该看起来像这样(未经测试):

Item.objects.extra('avg': 'AVG(UNIX_TIMESTAMP(created))'.values('avg')

问题是,您必须先将日期转换为UNIX时间戳。否则你无法计算平均值。字符串的平均值确实会产生垃圾。