Django - 你可以使用属性作为聚合函数中的字段吗?

时间:2010-06-18 00:27:29

标签: django django-models django-aggregation

我知道答案很简短,因为我试过了。有没有办法实现这一点(即使只是因为黑客攻击)?

class Ticket(models.Model):
    account = modelfields.AccountField()
    uuid = models.CharField(max_length=36, unique=True)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created']

    @property
    def repair_cost(self):
        # cost is a @property of LineItem(models.Model)
        return self.lineitem_set.aggregate(models.Sum('cost'))

2 个答案:

答案 0 :(得分:21)

没有。任何通过内置管理器的东西都必须是一个真实的领域,因为它们只触及数据库。为了使用属性,他们必须将表中的每条记录转换为模型,然后在Python中过滤它们。

答案 1 :(得分:4)

我有类似的情况,并希望完全相同的功能。我用以下几行解决了这个问题:

...
return sum(lt.cost for lt in self.lineitem_set)