如何通过几个表来查询关系来从这个关系的中间得到东西?

时间:2015-12-16 09:21:13

标签: python django database django-orm

想象一下,我有一个关系:

自动< - >门< - >窗口

我想找到所有打开车窗的车。我可以这样做:

Auto.filter(door__window__status__in=['open', 'almost open'])

但是如何通过单一查询找到哪些窗口导致特定车辆在查询中返回?

我需要这些信息,以显示这样的内容吗?

  • 红色福特(左前方窗口已打开)
  • 绿色野马(右前方窗口已打开)

如果我在所有4个表之间总是有m2m关系,情况会有多大差异吗?

1 个答案:

答案 0 :(得分:-1)

我考虑过这个模型:

from django.db import models


class A(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class B(models.Model):
    name = models.CharField(max_length=50)
    a = models.ManyToManyField(A)

    def __str__(self):
        return self.name        

class C(models.Model):
    name = models.CharField(max_length=50)
    b = models.ManyToManyField(B)

    def __str__(self):
        return self.name                

class D(models.Model):
    name = models.CharField(max_length=50)
    C = models.ManyToManyField(C)

    def __str__(self):
        return self.name  

现在运行以下查询:

results = A.objects.filter(b__c__d__in=['d1','d2']).all().values('name','b__name','b__c__name','b__c__d__name')

会给你渴望的结果