class Foo(models.model):
name = models.CharField(max_length = 50, blank = True, unique = True)
class Bar1(models.Model):
foo = models.ForeignKey('Foo')
value = models.DecimalField(max_digits=10,decimal_places=2)
class Bar2(models.Model):
foo = models.ForeignKey('Foo')
value = models.DecimalField(max_digits=10,decimal_places=2)
Clasess BAR1和BAR2是無關的,所以我不能做到這一點作爲一個類你會解決這個問題。但這只是一個例子,儘可能地表明問題是純粹的。
first = Foo.objects.all().annotate(Sum("bar1__value"))
second = Foo.objects.all().annotate(Sum("bar2__value"))
每個此查詢集都包含正確的值。
我不能將其合併到:
both = Foo.objects.all().annotate(Sum("bar1__value")).annotate(Sum("bar2__value"))
因爲總和值multiplicates - 這是不幸的是預期的行爲 - 因爲JOINS
而現在的問題 - 如何合併/加入第一和第二個得到兩者?
實施例:
酒吧1:
foo | value
--------------
A | 10
B | 20
B | 20
酒吧2:
foo | value
--------------
A | -0.10
A | -0.10
B | -0.25
兩者(值不同取決於進入BAR1和BAR2的順序)
foo | bar1__value__sum | bar2__value__sum
---------------------------------
A | 20 | -0.20
B | 40 | -0.50
預期結果:
foo | bar1__value__sum | bar2__value__sum
---------------------------------
A | 10 | -0.20
B | 40 | -0.25
,因爲結果是我無法使用itertools.chains:
foo | bar1__value__sum | bar2__value__sum
---------------------------------
A | null | -0.20
B | null | -0.25
A | 10 | null
B | 40 | null
無法使用最新的Django 1.10.3 – madzohan
@madzohan重現請馬上檢查更新後的代碼 –