【问题标题】:Realize a group by from a model having multiple foreign keys to the the same column of another table从具有多个外键的模型到另一个表的同一列实现分组
【发布时间】:2021-06-11 17:19:32
【问题描述】:

以下情况

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

modelB(django.db.models.Model):

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

【问题讨论】:

  • 按照你的建议,你应该使用 m2m。
  • 是的,这显然会更好,但我的问题是,如果没有蔓延的副作用(例如性能问题),我可能不知道是否有可能的解决方法,我现在找到了一个适合我的方法,请看下面我的回答

标签: django postgresql aggregation


【解决方案1】:

好的,因为我有一个固定的modelB 实例我想聚合,我找到了解决方案。

    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,
    )

但这只是我只想获取modelB 的单个实例的聚合统计信息的特定情况,是否有一种通用方法可以使用单个键获取GROUP_BY,例如modelB.pk

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多