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
字段中的最佳位置。我只是把它扔在那里,以便有人知道最终目标。