【问题标题】:three table relationship on djangodjango上的三表关系
【发布时间】:2011-03-18 21:08:24
【问题描述】:

我在这里尝试用三个模型做一些非常基本的事情:

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。我想知道如何获得所有汽车公司的名称,其大陆等于某家汽车公司的国家和最低工资,而无需进行两次数据库调用。

谢谢!

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    在查询Car 时获取Country 的详细信息很容易。 Car 有一个指向 Country 的外键,select_related() 可以解决问题。

    Car.objects.select_related().filter()
    

    但是(据我所知;如果我错了,请纠正我)Django 不允许您使用 select_related() 调用选择“反向关系”。这意味着您无法使用来自Countryselect_related 呼叫接听CountryProfile。这反过来意味着您最终会触发两个查询。

    如果您使用的是 Django 1.2 并且愿意回退到 raw SQL queries,那么您可以使用单个(连接)查询获取带有附加信息的 Car 实例。

    【讨论】:

    • 所以,我想没有更有效的方法可以做到这一点。感谢您的回复!
    • 如果你不介意离开 Django ORM,有几个选择。 1)正如我上面所说,使用 Django ORM 和自定义 SQL 查询的组合。 2)这个更激进。在这种情况下,使用 SQLAlchemy 处理您的连接。有关示例,请参见 stackoverflow.com/questions/1154331/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多