相关对象的多个注释

Multiple annotations on related objects

我正在尝试使用 Django ORM 为用户计算一些相关对象。

例如我有 3 个模型:UserAB

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。但是当我将查询分成两个单独的查询时 - 它工作得很好。

您应该将 Countdistinct=True 参数一起使用:

User.objects.annotate(a_count=Count('a_set', distinct=True), b_count=Count('b_set', distinct=True))