连接来自不同基本模型Django的多个查询集 [英] Join Multiple Querysets From Different Base Models Django

查看:23
本文介绍了连接来自不同基本模型Django的多个查询集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我当前有两个不同的型号。

class Journal(models.Model):
    date = models.DateField()
    from_account = models.ForeignKey(Account,related_name='transferred_from')
    to_account = models.ForeignKey(Account,related_name='transferred_to')
    amount = models.DecimalField(max_digits=8, decimal_places=2)
    memo = models.CharField(max_length=100,null=True,blank=True)

class Ledger(models.Model):
    date = models.DateField()
    bank_account = models.ForeignKey(EquityAccount,related_name='paid_from')
    account = models.ForeignKey(Account)
    amount = models.DecimalField(max_digits=8, decimal_places=2)
    name = models.ForeignKey(Party)
    memo = models.CharField(max_length=100,null=True,blank=True)
我正在视图中创建报告,并收到以下错误: 合并"ValuesQuerySet"类在每种情况下都必须涉及相同的值。

我尝试做的是只拉出常见的字段,这样我就可以将它们连接起来,例如

def report(request):

    ledger = GeneralLedger.objects.values('account').annotate(total=Sum('amount'))
    journal = Journal.objects.values('from_account').annotate(total=Sum('amount'))
    report = ledger & journal
...

如果我试图使它们完全相同以进行测试,例如

def report(request):

    ledger = GeneralLedger.objects.values('memo').annotate(total=Sum('amount'))
    journal = Journal.objects.values('memo').annotate(total=Sum('amount'))
    report = ledger & journal
...
我收到以下错误: 无法组合两个不同基本模型上的查询。

有人知道如何实现此目标吗?

推荐答案

from itertools import chain
report = chain(ledger, journal)

Itertools获胜!

如果要执行UNION,则应该将这些querysets转换为pythonset对象。

如果可以正确地对查询集本身进行过滤操作,您真的应该这样做!

这篇关于连接来自不同基本模型Django的多个查询集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆