2016-04-06 38 views
0

我不能在Django弄清楚这个查询集的过滤器设置:Django的连接表有两个FK领域的倒着

class City(models.Model): 
    cityname= models.CharField() 

class Doctor(models.Model): 
    name = models.CharField() 
    primarycity = models.ForeignKey(City) 
    secondarycity = models.ForeignKey(City) 

我要查询: 所有城市(一级或二级)有一个医生的名字“史密斯”

明显不适合我的工作:

list = City.objects.filter(doctor__name='Smith') 

这只会为我提供的主要城市“史密斯”的列表。我需要Django关注FK字段(城市和二级城市)

有人可以帮我吗?

回答

0

您必须指定related_name参数。像

class Doctor(models.Model): 
    name = models.CharField() 
    primarycity = models.ForeignKey(City, related_name='primary_doc') 
    secondarycity = models.ForeignKey(City, related_name='secondary_doc') 

东西之后,你可以用Q对象:

list = City.objects.filter(Q(primary_doc__name='Smith') | Q(secondary_doc__name='Smith')) 
+1

related_name不是必须 – doniyor

+0

我只是尝试了一下,解决了我的问题。非常感谢你! – caliph

+1

有**无查询**只能在设置related_name时完成。默认值总是很好。 –