我有一个非常常见的用例,我需要计算一些行并将结果注释到由模型信息本身分组的基本模型。
MyModel.objects
.filter(name='xyz')
.values('id', 'name')
.annotate(count=Count('relation__nested_relation', distinct=True))
现在我不想计算嵌套关系中的每个对象,但需要在特定的时间内计算对象。
MyModel.objects
.filter(name='xyz', relation__nested_relation__time__gt=mytime)
.values('id', 'name')
.annotate(count=Count('relation__nested_relation', distinct=True))
此时,MyModel
的每个nested_relation
实例都不会包含MyModel
的记录。相反,我想要每个count=0
记录但注释nested_relation
。
在SQL中,我会在联接的 ON子句中附加Count(When(relation__nested_relation__time__gt=mytime, then=1), distinct=True)
的过滤器。但似乎django不支持修改on子句。我有什么其他想法可以过滤我的计数声明?我的数据库后端是PostgreSQL,INSERT INTO webpage_point (webpage_id, point_ip)
SELECT webpage_id, '$ip' FROM s_w WHERE s_w_id=? LIMIT 1"
引发了SQL语法异常。