【发布时间】:2015-07-28 17:39:28
【问题描述】:
模型:
class Bar(GenericModel):
...
class Foo(GenericModel):
bar = models.ForeignKey(Bar, related_name='foo_bar')
查询:
bars = Bar.objects
.prefetch_related('foo_bar')
.annotate(sum_foo=Sum(
Case(
When(foo_bar__is_deleted=False, then='foo_bar__amount'),
default=Value(0),
output_field=IntegerField()
)
)
)
前者导致内连接:SELECT ... FROM "bar" INNER JOIN "foo" ON ( "bar"."id" = "foo"."bar_id" ) ...
我打算获得的是一个 LEFT OUTER JOIN(一个完整的“bar”对象列表,用“foo.amount”总和注释,如果与“bar”相关的“foo”不存在,则为 0)而不是内部联接?是否可以不回退到原始 SQL?
【问题讨论】:
-
作为未来人们的便条。这可能是由 1.8.3 中修复的错误引起的
标签: django django-models django-queryset django-orm django-1.8