【问题标题】:Django ORM: Sort by count of related action of type1 but exclude when count of related action of type2 > type1Django ORM:按type1的相关动作计数排序,但当type2的相关动作计数> type1时排除
【发布时间】:2014-04-30 19:36:31
【问题描述】:

假设我们有以下模型:

class Item(models.Model):
    pass


class Action(models.Model):
    item = models.ForeignKey(Item, related_name='actions')
    type = models.PositiveSmallIntegerField(default=1)

类型 = 1 或 2

我需要找到 type1 操作最多type2 操作不超过 type1 的前 3 个项目。 (count_of_action1 > count_of_action2)

测试:

   #item : {type1: action_count, type2: action_count}
        1: {1: 5, 2: 2},
        2: {1: 4, 2: 2},
        3: {1: 3, 2: 2},
        4: {1: 3, 2: 1},
        5: {1: 6, 2: 7},

应该产生 [1,2,3] 但不是 5。

查询必须非常高效,因为操作和项目的数量非常大。 底层数据库是 MySQL。

有人知道如何使用 Django ORM 实现上述目标吗?

【问题讨论】:

  • 我认为你应该使用queryset objectextra 方法。您不妨创建自己的经理来“透明地”处理查询。

标签: python sql database django django-models


【解决方案1】:

你有没有看过 django 的关于聚合和注释的文档。

【讨论】:

  • 我当然知道annotate!然而,这并不是通过 annotate API 或 F() 或两者的组合来轻松完成的。我确实先阅读了我的手册。
猜你喜欢
  • 2021-03-25
  • 1970-01-01
  • 2019-08-11
  • 2018-06-03
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多