Django 查询集值不合并

django queryset values not merging

基于

我有这个型号

class PortfolioExchangeTransaction(models.Model):
    creator = models.ForeignKey('accounts.Account', on_delete=models.SET_NULL, null=True, blank=True,
                                verbose_name=_('Creator'))
    create_time = models.DateTimeField(default=timezone.now, verbose_name=_('Create Time'))
    portfolio = models.ForeignKey(Portfolio, on_delete=models.SET_NULL, null=True, blank=True,
                                  verbose_name=_('Portfolio'), related_name='exchange_transaction')
    type = models.CharField(max_length=40, choices=Transaction_TYPE, blank=True, null=True, verbose_name=_('Type'))
    exchange = models.ForeignKey(BorseExchange, on_delete=models.SET_NULL, null=True, blank=True,
                                 verbose_name=_('Exchange'))
    count = models.IntegerField(default=0, verbose_name=_('Count'))

我想对每个交易所的所有 PortfolioExchangeTransaction 计数求和

所以我想按以下代码对每次交换的相似记录查询集求和:

result = PortfolioExchangeTransaction.objects.all().values('exchange')

我希望得到这样的东西:

<QuerySet [{'exchageid': 591}, {'exchageid': 512}, {'exchageid': 248}, {'exchageid': 940}]>

但是我得到的值是这样的:

<QuerySet [{'exchageid': 591}, {'exchageid': 591}, {'exchageid': 512}, {'exchageid': 248}, {'exchageid': 591}, {'exchageid': 591}, {'exchageid': 591}, {'exchageid': 591}, {'exchageid': 940}, {'exchageid': 591}, {'exchageid': 248}, {'exchageid': 248}]>

已更新

我想在鞠躬后使用注释:

result.annotate(sum_count=Sum('count', output_field=BigIntegerField()))

所以我不能使用 distinct 因为给出这个 :

NotImplementedError('annotate() + distinct(fields) is not implemented.')

如何解决这个问题?

您可以在此处使用 distinct()

PortfolioExchangeTransaction.objects.all().values('exchange').distinct()

更新

在这里使用GROUP BY

result = PortfolioExchangeTransaction.objects.values('exchange').annotate(sum=Sum('count')).values('exchange', 'sum')