我有两个模特。
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)
这样做的有效方法是什么。 ? 感谢
答案 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'))