Sql Django反向关系与select_相关

Sql Django反向关系与select_相关,sql,django,orm,Sql,Django,Orm,我有4个模型,我想检索它们之间的连接 ModelA class ModelA(models.Model): product = models.ForeignKey(ModelB) group = models.ForeignKey(Group) ModelB class ModelB(models.Model): title = models.CharField() ModelC class ModelC(models.Model): product = mo

我有4个模型,我想检索它们之间的连接

ModelA

class ModelA(models.Model):
    product = models.ForeignKey(ModelB)
    group = models.ForeignKey(Group)
ModelB

class ModelB(models.Model):
    title = models.CharField()
ModelC

class ModelC(models.Model):
    product = models.ForeignKey(ModelB)
    group = models.ForeignKey(ModelD)
ModelD

class ModelD(models.Model):
    name = models.CharField()
现在我希望所有的ModelA对象都与ModelBModelCModelD连接起来 在sql中,这是很容易做到的。只需在表之间进行连接。 对于Django ORM,我被卡住了,因为我只能做正向关系

我正在这么做

ModelA.objects.all().select_related(product)
但我不能加入ModelC 我已经读过了,但我不想重复我的大名单,做一件简单的事情!我只想访问数据库一次

我使用的是Django的最后一个版本,我希望已经有了一个解决方案,我不知道


谢谢。

编辑:重新阅读问题后,解决方案并不是那么简单

他们说:

select\u related
仅限于单值关系-外键 一对一

Django 1.4 querysets将提供该方法,您应该阅读该方法。听起来你不可能在一个查询中完成它,但是你可以在2到3个查询中完成它。你一定要看看,如果你真的需要的话,升级到dev版本

如果您不能使用dev版本并且不能等待1.4,django也支持

请参阅上的文档。目前它只是dev版本,但将使用django1.4。若你们可以等,或者你们可以在树干上跑步。你可以用这个


同时,你可以试试。它基本上也有相同的用途。

您是否尝试过类似的方法:
ModelA.objects.all()。选择“相关的”(“产品”、“产品”modelc“、“产品”modelc“组”)
?没有将此作为答案发布,因为我不能完全确定它是否符合您的要求。@bildja:
select\u related
不支持遍历。正确
prefetch\u related
并不能像select\u related那样在单个查询中完成所有操作。简单地说,没有办法做到这一点。这是为了解决n+1查询问题,在该问题中,通过相关项进行循环会导致对每个循环进行查询。相反,它首先对关系执行单个查询,然后缓存结果以供以后使用。