首页 > 解决方案 > 从具有多个外键的模型到另一个表的同一列实现group by

问题描述

以下情况

ModelA(django.db.models.Model):
  abc = ForeignKey('modelB', related_name="from abc")
  def = ForeignKey('modelB', related_name="from def")

modelB(django.db.models.Model):

有没有办法实现GROUP_BY通孔ModelA.objects.values('some_magic_link_to_Model_B').annotate()而不是ModelA.objects.values('abc', 'def').annotate()(结果是手动构建结果列表,因为它会导致两个键的分组结果)还是我必须考虑添加中间 M2M 转换?

标签: djangopostgresqlaggregation

解决方案


Okay, since i have a fixed modelB instance i want to aggregate, i found a solution.

    identifier_pk=django.db.models.Value(fixedInstanceOfmodelB__modelC.pk, output_field=IntegerField())
    stats = ctx.order_by().annotate(
        group_key=identifier_pk,
    ).values('group_key').annotate(
        whatever=asd,
    )

but that just the specific case where i only want to get aggregated stats for a single instance of modelB, is there a generic way to get a GROUP_BY with a single key e.g. modelB.pk


推荐阅读