現在、2つの異なるモデルを所有しています。
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
...
次のエラーが発生します: 2 つの異なる基本モデルでクエリを組み合わせることはできません。
これを実現する方法を知っている人はいますか?
ベストアンサー1
from itertools import chain
report = chain(ledger, journal)
イターツール勝利のために!
Union を実行する場合は、これらをquerysets
Pythonset
オブジェクトに変換する必要があります。
クエリセット自体を適切にフィルタリングできる場合は、ぜひそうしてください。