开发者

Django - Can you use property as the field in an aggregation function?

开发者 https://www.devze.com 2023-01-04 01:57 出处:网络
I know the short answer because I tried it. Is there any way to accomplish this though (even if only on account of a hack)?

I know the short answer because I tried it. Is there any way to accomplish this though (even if only on account of a hack)?

class Ticket(models.Model):
    account = modelfie开发者_运维知识库lds.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'))


No. Anything that goes through a built-in manager has to be a real field, since they only touch the database. In order to work with a property they'd have to turn every record in the table into a model, then filter through them in Python.


I have a similar scenario and want exactly the same feature. I solved it trivially with the following line:

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


can use django-queryable-properties

0

精彩评论

暂无评论...
验证码 换一张
取 消