【发布时间】:2021-04-30 00:28:09
【问题描述】:
我有这个型号
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_by和values必须在同一个字段中。
标签: django orm django-queryset