Python Django 1.8条件表达式返回空queryset
我有两个类似的模型:Python Django 1.8条件表达式返回空queryset,python,django,django-models,Python,Django,Django Models,我有两个类似的模型: class Foo(models.Model): # fields... class Bar(models.Model): foo = models.ForeignKey(Foo) is_done = models.BooleanField() # more fields.... 我想在Foo上加上所有相关Bar对象的计数,这些对象的已完成为true 不幸的是,我被困在Django 1.8中,所以我不能选择Count('bar',filt
class Foo(models.Model):
# fields...
class Bar(models.Model):
foo = models.ForeignKey(Foo)
is_done = models.BooleanField()
# more fields....
我想在Foo
上加上所有相关Bar
对象的计数,这些对象的已完成
为true
不幸的是,我被困在Django 1.8中,所以我不能选择Count('bar',filter='bar'u'u'u'u done
)
因此,我使用了条件聚合:
Foo.objects.all().annotate(
# other fields...
done=Count(Case(
When(bar__is_done=True, then=1),
output_field=IntegerField()
))
)
不幸的是,这将返回一个空查询集。删除条件返回一个正常的查询集,但最后一个注释似乎破坏了查询
出什么问题了?如果你被一个Django发行版卡住了,它在一年多前进行了最后一次安全更新,那么你应该处理非常低的内部网流量,并在
foo.bar\u set.filter(is\u done=True)
或类似的东西上循环。如果您实际上是在一个可以访问internet的地方托管此文件,那么这绝对不是您应该首先解决的问题。如果您在Django发行版上遇到了一年多前的最后一次安全更新,那么您应该处理非常低的内部网流量,并通过foo.bar\u set.filter(is\u done=True)进行循环
或类似内容不应成为问题。如果你真的在一个互联网可以访问的地方托管,这绝对不是你应该首先解决的问题。