Django递归聚合

时间:2014-08-25 21:59:16

标签: python sql django django-models django-queryset

使用django,假设我有一个模型,该模型是一个具有外键的Team模型,称为分组。我还有一个名为Pen的模型,带有一个团队的外键。

class Team(Model):
    grouped = models.ForeignKey(
        'self',
        related_name='grouped_teams',
    )

class Pen(Model):
    team = models.ForeignKey(
        Team,
        related_name='pens',
    )
    ink = IntegerField()

有几个团队,每个团队都有钢笔。现在让我们假设您选择了几个团队并添加了一个新团队,所有这些团队都指向了这个团队。这种情况可能会在一些团队中多次发生,因此您最终会得到类似以下内容的内容:只有原始团队(最低级别的团队)才有笔:

                                A-Team
                                  /\
                                 /  \
                                /    \
                               B      C
                              /\      7 pens
                             /  \    
                            /    \
                           /      \
                          D        E
                        4 pens     /\
                                  /  \
                                 /    \
                                /      \
                               F        G
                            5 pens      2 pens

只知道A-Team,有没有办法汇总笔上的墨水总量?

self.grouped_teams.aggregate(Sum(' pens__ink'))适用于一个级别,但不是更多。原始的SQL?

0 个答案:

没有答案