Python Django如何求逆FK和逆FK的逆FK之和

Python Django如何求逆FK和逆FK的逆FK之和,python,django,django-models,Python,Django,Django Models,由于一个绝对奇妙的DB设计,我偶然发现了一个问题。我正在计算反向FK匹配及其反向FK匹配的数量(按照此问题中的方法:)。我试着做: assert 6 == Model.objects.annotate(counting=Count(f"blah1") + Count(f"blah1__blah2")).get(id=1).counting 但是我得到了6==7,因为在我的查询中,总是给我一个额外的1。为什么呢 编辑:模型: 类模型(models.Mode

由于一个绝对奇妙的DB设计,我偶然发现了一个问题。我正在计算反向FK匹配及其反向FK匹配的数量(按照此问题中的方法:)。我试着做:

assert 6 == Model.objects.annotate(counting=Count(f"blah1") + Count(f"blah1__blah2")).get(id=1).counting
但是我得到了
6==7
,因为在我的查询中,总是给我一个额外的1。为什么呢

编辑:模型:

类模型(models.Model):
...
Blah1类(models.Model):
父项=models.ForeignKey(Model,on_delete=models.CASCADE)
Blah2类(models.Model):
parent=models.ForeignKey(Blah1,on_delete=models.CASCADE)
Count('blah1')
将计算与
Count('blah1_uublah2')
相同数量的项目,因为您已加入。实际上,查询看起来像:

SELECT model.*, COUNT(blah1.id) + COUNT(blah2.id) AS counting
FROM model
LEFT OUTER JOIN blah1.parent = model.id
LEFT OUTER JOIN blah2.parent = blah1.id

在这里,我们将只计算不同的
blah1
对象。

count('blah1')
将计算与
count('blah1_ublah2')
相同数量的项目,因为您进行了一次联接。啊,联接是否会额外提供1?我应该去掉
Count(“blah1”)
?不,通常它只会计算所有非
NULL
的额外值。但我建议分享你的模型(相关部分)(你可以混淆名称)和样本数据
from django.db.models import Count

Model.objects.annotate(
    counting=Count('blah1', distinct=True) +
             Count('blah1__blah2')
).get(id=1).counting