2016-04-06 40 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時完成。默認值總是很好。 –