我有以下型号:
class Foo(models.Model):
pass
class Bar(models.Model):
foo = models.ForeignKey(Foo)
is_successful = models.BooleanField()
如果与对象关联的所有对象都具有,我想获取foo
带有注释的所有对象bar
foo
is_successful
True
到目前为止,我的查询集是:
foos = Foo.objects.all().annotate(all_successful=Min('bar__is_successful'))
注释的想法all_successful
是,如果所有行的最小值is_successful
为 1,那么它们都必须是True
(假设0
isFalse
和1
is True
)。所以知道我可以像这样使用查询集:
foo = foos[0]
if foo.all_successful == 1:
print 'All bars are successful'
else:
print 'Not all bars are successful'
这在 sqlite 中效果很好,但是在 PostgreSQL 中失败了,因为 PostgreSQL 无法MIN
在布尔列上执行聚合。我猜这在 sqlite 中有效,因为 sqlite 将布尔值视为整数,因此它可以执行聚合。
我的问题是如何在不将我的is_successful
字段转换为 PostgreSQL 的情况下使这个查询集在 PostgreSQL 中工作IntegerField
?
谢谢