2016-08-04 50 views
-1

如果我从D类开始访问,以便在D中给出一个匹配的'a'来获得所有的B.name和C.name,我该如何去做?例如,如果D匹配A中的名称属性,那么我想为每个找到的B.name都获得所有匹配的B.name(bs)和相应的C.name。在Django相关表中访问fileds

class A(models.Model): 
    name = models.CharField(max_length=32) 
    bs = models.ManyToManyField('B') 

class B(models.Model): 
    name = models.CharField(max_length=32) 
    cs = models.ForeignKey('C') 

class C(models.Model): 
    name = models.CharField(max_length=15) 

class D(models.Model): 
    a = models.ForeignKey('A') 

回答

1

你可以很容易地通过

d = D.objects.get(id=5) 
bs = d.a.bs.all() 
#Now you can iterate over each bs and get their name 
for b in bs: 
    print(b.name, b.cs.name) 

如果你有大量的数据,那么这将产生多个查询,所以你应该使用select relatedprefetch related优化查询得到的结果。