微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 ForeignKey 与 ManyToManyField django 查询集相加

如何解决如何将 ForeignKey 与 ManyToManyField django 查询集相加

我有这个模型

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,verbose_name=_('Portfolio'),related_name='exchange_transaction')
    type = models.CharField(max_length=40,choices=Transaction_TYPE,verbose_name=_('Type'))
    exchange = models.ForeignKey(BorseExchange,verbose_name=_('Exchange'))
    count = models.IntegerField(default=0,verbose_name=_('Count'))

并希望基于交易所对该模型的数量和投资组合进行求和

所以我使用下面的代码

transes.annotate(exc_count=Case(
            When(type='negative',then=F('count') * -1),When(type='positive',then=F('count')),)
        ).values('exchange').annotate(
            sum_count=Sum('exc_count')
        ).values('exchange','sum_count').annotate(
            portfolios=Value(None,output_field=ManyToManyField(Portfolio))
        )

结果是:

<QuerySet [{'exchange': 248,'sum_count': 4000,'portfolios': None},{'exchange': 512,'sum_count': 10000,{'exchange': 591,'sum_count': 0,{'exchange': 940,'portfolios': None}]>

正如所见,我创建了投资组合字段并希望将外键与 manytomanyfield 相加(现在是 None 值)

怎么做?

解决方法

我们可以对实例字段而不是对象实例进行注释。

As quoted by Todor:注解是在数据库级别完成的计算。 Django 只为您提供了一组可由数据库处理的基本计算 - SUM、AVERAGE、MIN、MAX 等等...

结论:我们无法将所有 ForeignKey 实例转换为 ManyToManyField

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。