Django模型外键组计算

时间:2017-06-24 11:25:28

标签: django postgresql django-models django-rest-framework

我有两个模特。

class A(models.Model):

  id = models.IntegerField()
  name = models.CharField()

class B(models.Model):

  item = models.ForeignKey(A)
  view = models.IntegerField()
  name = models.CharField()

我想得到A的列表,当我得到列表时,我想计算用特定的A映射的B类的数量(数量)和已查看的数量(view = 1)?

示例:

A

id | name
1  | A1
2  | A2

item_id | name  | view 
1       | B1    |  1
1       | B2    |  1
1       | B3    |  0
2       | B4    |  0

输出:像这样。

[
{
  id : 1
  name: A2
  num_of_item: 3
  num_of_view: 2
}
{
  id : 2
  name: A2
  num_of_item: 1
  num_of_view: 0
}
]

输出结果如下序列化。

details = A.objects.filter(id__in=[1,2])
result_page = paginator.paginate_queryset(details, request)
serializer = ASerializer(result_page, many=True)
return paginator.get_paginated_response(serializer.data)

这样做的有效方法是什么。 ? 感谢

1 个答案:

答案 0 :(得分:1)

您可以在此处利用 annotate 以及反向查找,如下所示:

from django.db.models import Count, Sum
A.objects.all().annotate(num_of_item=Count('b'), num_of_view=Sum('b__view'))