代码之家  ›  专栏  ›  技术社区  ›  ohid

通过查询组合具有相同外键字段的多行

  •  1
  • ohid  · 技术社区  · 7 年前

    current model.objects.all()创建:

     FK Column  Column1  Column2  Column3
      Zone 1        19      23       67
      Zone 2        45      12       76
      Zone 1        23      98       34
      Zone 2        12      56       23
    

    预期结果:

     FK Column  Column1  Column2  Column3
      Zone 1        42      101       111
      Zone 2        57      68        99
    

    FK将自动合并为一行。

    我应该使用哪个查询来实现这一点?

    1 回复  |  直到 7 年前
        1
  •  1
  •   willeM_ Van Onsem    7 年前

    你可以用一个 .values(..) 和一个 .annotate(..) .order_by(..) :

    Model.objects.values(
        'fk_column'
    ).annotate(
        sumcol1=Sum('col1'),
        sumcol2=Sum('col2'),
        sumcol3=Sum('col3'),
    ).order_by('fk_column')
    

    这将导致 QuerySet 属于 dict 保守派。每本词典都包含一个 'fk_column' 我是说, 'sumcol1' 我是说, 'sumcol2' ,和 'sumcol3' 是的。然后可以进一步处理这些参数。