Django-将多字段总和分组

时间:2019-01-04 06:24:29

标签: django django-models

Django 2.1,python 3.6

我有两个模型

house = (
    ('Clubs','Clubs'),
    ('Diamonds','Diamonds'),
    ('Hearts','Hearts'),
    ('Spades','Spades'),
    )

class Card(models.Model):
    id           = models.CharField(max_length=36, blank=False, primary_key=True)
    card         = models.CharField(max_length=15, blank=False)
    number       = models.IntegerField(default=1)
    house        = models.CharField(choices=house)

class Deck(models.Model):
    id       = models.CharField(max_length=50, primary_key=True)
    name     = models.Charfield(...)
    card        = models.ManyToManyField(Card, through='DeckCard')

class DeckCard(models.Model):
    deck = models.ForeeignKey(Deck, on_delete=models.cascade)
    card  = models.ForeignKey(Card, on_delete=models.CASCADE)

    @property
    def number_sum(self):
        self._number_sum= self.card.aggregate(total=models.Sum('number'))['total']
        return number_sum

属性字段number_sum成功返回正确的计数。但是,我现在想按house将总和分组?有谁知道该怎么做?

我不像以前那样清楚,所以我已经阐述了。

卡片应显示的位置

id...name........number...house
1....ace_diamonds..1......diamonds
2....two_diamonds..2......diamonds
3....three_diamonds..3....diamonds
4....four_diamonds...4....diamonds
...
52...king_Spades...13....spades

和甲板看起来像

id...name
1...johnsdeck
2...bettysdeck

假设DeckCard如下所示

deck..card
1...ace_diamonds
1...two_diamonds
1...ace_diamonds (yes there can be duplicates)
1...three_hearts
2...ace_hearts

然后,模型Deck是每个人的卡片组。 DeckCard是卡片组中的物理卡。 Card包含卡片上的属性。

我想让Deck提供一些有关套牌的统计数据。例如。每个房子的总数。

所以在该示例中,我希望有一个总计数和每个房屋的计数 甲板1 总计:7(1 + 2 + 1 + 3) 钻石:4 心数:3 黑桃:0 俱乐部:0

甲板2 合计:1 心:1

self._number_sum= self.card.aggregate(total=models.Sum('number'))给了我每层甲板的总数,或者在这种情况下为7。但是,我想拥有一个group by,以便除总数外,我还能为每所房屋计数。有谁知道该怎么做。

最后,我想像这样将其放入api

{  
  card: ...
  numbers: {
            Total:1
            Diamonds:4
            Clubs:0
            Hearts:3
            Spades:0
            }
}

但这不是这个问题。我很确定将其放置在@property字段中的最佳位置。我只是把它扔在那里,以便有人知道最终目标。

0 个答案:

没有答案