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')
基于
我有这个型号
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')