Django ORM - 添加多个列和聚合并按总计过滤

时间:2015-05-28 04:49:03

标签: python django orm

我试图从相关表格和相关表格中的另一列中获取add 2 Sum聚合,然后按该总计进行过滤。我不确定这是否可以通过ORM实现。我也尝试使用自定义SimpleListFilter在Django管理员中执行此操作。

表:

class Table1(models.Model):
    foo = models.CharField()
    t3 = models.ForeignKey('Table3')
    t4s = models.ManyToManyField('Table4', through='Table1x4')

class Table2(models.Model):
    t1 = models.ForeignKey(Table1)
    value = models.PositiveIntegerField()

class Table3(models.Model):
    value = models.PositiveIntegerField()

class Table1x4(models.Model)
    t1 = models.ForeignKey(Table1)
    t4 = models.ForeignKey(Table4)
    value = models.PositiveIntegerField()

class Table4(models.Model):
    value = models.PositiveIntegerField()

我认为下面的查询会得到我想要的结果,但是当我尝试使用queryset.raw(...)在Django管理员中使用等效时,它说它无法连接到数据库但是我没有日志中的实际错误,所以我还没有能够弄清楚到底发生了什么。

SELECT t1.*, t3.value + SUM(t2.value) + SUM(t4.value) as total_value
FROM table1 t1
  JOIN table2 t2 ON t.t1_id = t1.id
  JOIN table3 t3 ON t1.t3_id = t3.id
  JOIN table1x4 t1x4 ON t1x4.t1_id = t1.id
  JOIN table4 t4 ON t4.id = t1x4.t4_id
GROUP BY t1.id
HAVING total_value = 2;

0 个答案:

没有答案