联接3个表queryset Python Django
我需要在Django上的查询中连接3个表 我在MySQL中有两个查询,都返回相同的结果,使用一个或另一个查询没有关系: 向何处查询联接3个表queryset Python Django,python,mysql,django,django-queryset,drf-queryset,Python,Mysql,Django,Django Queryset,Drf Queryset,我需要在Django上的查询中连接3个表 我在MySQL中有两个查询,都返回相同的结果,使用一个或另一个查询没有关系: 向何处查询 SELECT dv.Division, COUNT(or.`ct_id`) AS `orders`, COUNT(CASE WHEN gr.`Status` = 'on going' THEN 1 ELSE NULL END) AS `ge_on_going`, FROM order or, zone zo, cctt ct, division dv
SELECT dv.Division,
COUNT(or.`ct_id`) AS `orders`,
COUNT(CASE WHEN gr.`Status` = 'on going' THEN 1 ELSE NULL END) AS `ge_on_going`,
FROM order or, zone zo, cctt ct, division dv
WHERE or.zone_id = zo.id
AND or.cctt_id = ct.id
AND zo.division_id = dv.id
GROUP BY dv.Division
带联接的查询
SELECT dv.Division,
COUNT(or.`ct_id`) AS `orders`,
COUNT(CASE WHEN gr.`Status` = 'on going' THEN 1 ELSE NULL END) AS `ge_on_going`,
FROM order or
INNER JOIN cctt ct ON (or.cctt_id = ct.id)
INNER JOIN zone zo ON (or.zone_id = zo.id)
INNER JOIN division dv ON (zo.division_id = dv.id)
GROUP BY dv.Division
如何将该查询转换为django,我有这个,但它不起作用:
模型
class DivisionModel(models.Model):
id = models.PositiveIntegerField(db_column='Id', primary_key=True)
division = models.CharField(db_column='Division', max_length=50)
class ZoneModel(models.Model):
id = models.AutoField(db_column='Id', primary_key=True)
zone = models.CharField(db_column='Zone', max_length=50)
division = models.ForeignKey(DivisionModel, on_delete=models.DO_NOTHING, db_column='Division_id')
class OrderModel(models.Model):
zone = models.ForeignKey(ZonaModel, on_delete=models.DO_NOTHING, db_column='Zone_Id')
cctt = models.ForeignKey(CCTTModel, on_delete=models.DO_NOTHING, db_column='CCTT_Id')
fservice = models.DateTimeField(db_column='FServicio')
class CCTTModel(models.Model):
status = models.CharField(db_column='Status', max_length=23)
您可以这样尝试:
模型中的
Status
字段在哪里?定义的Order
模型在哪里?我修复了模型您的解决方案已关闭,返回:[{'id':1,'division':西班牙,'Order':44},{'id':2,'division':意大利,'Order':15}>
但我需要此返回:[{'division':西班牙,'Order':44,'geu on'goin':4},{'division':'Italy','order':15,'ge_on goin':7}]>
更新了我的答案。请再试一次完善!!但只是一个细节,我不需要id,它可以删除[{'id':1,'division':'Spain','order':48,'ge_on goin':0},{'id':2,'division':'Italy','order':15,'ge_on goin':4}
。这是可行的?然后使用值即可('division','order','ge_on_goin')
而不是values()
QuerySet[{'division':'Spain','order':10},{'division':'Spain','order':22},{'division':'Spain','order':4},{'division':'Spain','order':0,'Geu on goin',"师":"西班牙","秩序":10","师":"西班牙","秩序":2,"师","意大利","秩序":6,"师":"意大利","秩序"1,"戈":1,"戈"戈,{'division':'Italy','order':4,'ge_on_goin':4}]
from django.db.model import Q, Count
DivisionModel.objects.values('division').annotate(orders=Count('zonemodel__ordermodel__cctt'), ge_on_going=Count('zonemodel__ordermodel__cctt', filter=Q(zonemodel__ordermodel__cctt__status="on going"))).values('division', 'order', 'ge_on_goin')