相关对象的多个注释
Multiple annotations on related objects
我正在尝试使用 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。但是当我将查询分成两个单独的查询时 - 它工作得很好。
您应该将 Count
与 distinct=True
参数一起使用:
User.objects.annotate(a_count=Count('a_set', distinct=True), b_count=Count('b_set', distinct=True))
我正在尝试使用 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。但是当我将查询分成两个单独的查询时 - 它工作得很好。
您应该将 Count
与 distinct=True
参数一起使用:
User.objects.annotate(a_count=Count('a_set', distinct=True), b_count=Count('b_set', distinct=True))