【问题标题】:django queryset values not mergingdjango queryset 值不合并
【发布时间】:2021-04-30 00:28:09
【问题描述】:

基于this answer

我有这个型号

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}]>

更新

我想在 abow 之后使用注释:

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

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

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

如何解决这个问题?

【问题讨论】:

  • 有时values() 没有合并。可以通过在values() 之前使用order_by() 来修复它。注意:order_byvalues 必须在同一个字段中。

标签: django orm django-queryset


【解决方案1】:

你可以在这里使用distinct()

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

更新

在此处使用GROUP BY

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

【讨论】:

  • distinct 会阻止 annotate 和 order_by。其他解决方案?
猜你喜欢
  • 1970-01-01
  • 2020-11-29
  • 2021-11-22
  • 2017-10-08
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多