Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
联接3个表queryset Python Django_Python_Mysql_Django_Django Queryset_Drf Queryset - Fatal编程技术网

联接3个表queryset Python Django

联接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

我需要在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
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')