django三表关系

时间:2010-07-21 09:00:37

标签: django django-models

我正在尝试用三种模式做一些非常基本的事情:

class Car(models.Model):
   country = models.ForeignKey(Country)
   company_name = models.CharField(max_length=50)
   continent = models.CharField(max_length=50)

class CountryProfile(models.Model):
   country = models.ForeignKey(Country)
   minimum_wage = models.IntField()

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

基本上,Car指向Country,CountryProfile也指向Country。我想知道如何让所有汽车的公司名称与大陆等于与相应汽车公司所在国家相关的最低工资,而不必进行两次数据库调用。

谢谢!

1 个答案:

答案 0 :(得分:0)

在查询Country时,提取Car的详细信息很容易。 Car有一个指向Country的外键,而select_related()会执行此操作。

Car.objects.select_related().filter()

然而(据我所知;如果我错了请纠正我)Django不允许你使用select_related()电话选择“反向关系”。这意味着您无法使用来自CountryProfile的{​​{1}}来接听select_related。这反过来意味着你最终会发出两个查询。

如果您使用的是Django 1.2,并且愿意回退到raw SQL queries那么您可以使用单个(加入)查询获取包含其他信息的Country个实例。