2010-06-18 70 views
15

我知道简短的答案,因为我试过了。有没有办法做到这一点(即使仅仅是因为黑客)?Django - 你可以使用属性作为聚合函数中的字段吗?

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')) 
+0

你真的需要显示LineItem模型也。 – 2010-06-18 00:31:59

回答

17

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

+0

谢谢。我认为可能是这样。我想'获得所有lineitemss,然后调用他们的成本财产',但那将是如此昂贵:( – orokusaki 2010-06-18 14:56:37

3

我有一个类似的情况,并希望完全相同的功能。我用下面的线解决它:

... 
return sum(lt.cost for lt in self.lineitem_set) 
相关问题