簡體   English   中英

連接 3 個表查詢集 Python Django

[英]join 3 tables queryset Python Django

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

您可以嘗試使用annotation這樣:

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM