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

oro*_*aki 21 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'))
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 23

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


Fis*_*tor 5

我有一个类似的场景并且想要完全相同的功能。我用以下行轻松解决了它:

...
return sum(lt.cost for lt in self.lineitem_set)
Run Code Online (Sandbox Code Playgroud)

  • 但与 django ORM 相比,它很慢,太慢了 (2认同)