连接来自不同基本模型Django的多个查询集 [英] Join Multiple Querysets From Different Base Models Django
本文介绍了连接来自不同基本模型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屋!
查看全文