【问题标题】:Django models foreignkey group calculationDjango 建模外键组计算
【发布时间】:2017-11-27 21:17:17
【问题描述】:

我有两个模型。

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 的列表,当我获得列表时,我想计算有多少(数字)类 B 映射到特定 A 以及查看了多少(view=1)?

示例:

一个

id | name
1  | A1
2  | A2

B

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)

什么是有效的方法。 ? 谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。第二部分是计算 1 还是 0 ?如何设置条件来计算 1 ?默认情况下它计数 1 ?
    • Sum(Case(When(b__view=1 , then=1), output_field=IntegerField()))。谢谢
    • 其实你应该在第二部分使用Sum
    猜你喜欢
    • 2014-06-08
    • 2021-10-08
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2021-04-29
    • 2012-07-10
    • 2019-04-20
    • 1970-01-01
    相关资源
    最近更新 更多