我正在尝试使用Django ORM为用户计算一些相关对象。
例如,我有3个模型:User
,A
,B
class A(models.Model):
creator = models.ForeignKey(
'users.User', on_delete=models.CASCADE, related_name='A_set'
)
class B(models.Model):
creator = models.ForeignKey(
'users.User', on_delete=models.CASCADE, related_name='B_set'
)
a_model = models.ForeignKey(
'a.A', on_delete=models.CASCADE, related_name='B_set'
)
我的查询如下:
User.objects.annotate(a_count=Count('a_set')).annotate(b_count=Count('b_set'))
当b_count
总是复制值a_count
时,除非b
对象的实数为0。但是当我将查询分为两个部分时-很好。
答案 0 :(得分:1)
您应将Count
与distinct=True
参数一起使用:
User.objects.annotate(a_count=Count('a_set', distinct=True), b_count=Count('b_set', distinct=True))