我试图从相关表格和相关表格中的另一列中获取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;