我有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 对象与 ModelB , ModelC 和 ModelD 相结合 在sql中,这很容易做到。只需在表之间建立联接。 随着Django ORM我被卡住了,因为我只能做前进的关系。
我正在做这个
ModelA.objects.all().select_related(product)
但我无法加入ModelC 我已经阅读了this article,但我不想在我的大清单上循环,做一件简单的事情!我想只打一次数据库。
我正在使用Django的最后一个版本,我希望已经有一个解决方案,我不知道。
谢谢。
答案 0 :(得分:8)
请参阅prefetch_related上的文档。这只是目前的开发,但会受到Django 1.4的影响。如果你可以等,或者你可以在行李箱上运行。你将能够使用它。
与此同时,您可以尝试django-batch-select。它基本上起到了同样的作用。
答案 1 :(得分:3)
编辑:重新阅读问题后,解决方案就不那么简单了。
docs说:
select_related
仅限于单值关系 - 外键 和一对一。
Django 1.4查询集将具有prefetch_related方法,您一定要阅读。听起来你无法在一个查询中完成它,但是你可以在2或3中完成它。你应该看一看,如果你确实需要的话,升级到dev版本。< / p>
如果你不能使用开发版并且不能等待1.4,那么django也支持custom SQL queries。