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重现请马上检查更新后的代码 –