Django向后连接两个FK字段的表

时间:2016-04-06 08:27:17

标签: python django django-queryset

我无法在Django中找出这个查询集的过滤器设置:

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字段(城市和二级城市)

有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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'))