我很难尝试编写Django ORM查询来获取以下查询的类似内容:
vendors = Vendors.objects.select_related('legal_entities') #....and then I want to also get legal_entities_details
我的模特:
class LegalEntitiesDetails(models.Model):
legal_entities = models.ForeignKey(LegalEntities, models.CASCADE)
class LegalEntities(models.Model):
#...Some fields
class Vendors(models.Model):
legal_entities = models.ForeignKey(LegalEntities, on_delete=models.CASCADE)
我无法通过select_related找出如何做到这一点。您看到的问题是我无法编写一个简单的链式selected_related,因为供应商和legal_entities_details都与legal_entities相关。请耐心等待这个问题,我是Django的新手。
答案 0 :(得分:1)
你不能用select_related
做到这一点,因为那只适用于前向关系,LegalEntities和LegalEntitiesDetails之间的联系是一种向后关系。您需要使用prefetch_related
,它可以遵循向后关系,但使用两个查询来执行此操作。
答案 1 :(得分:1)
您是否尝试过相关预取?来自docs:
select_related通过创建SQL连接并在SELECT语句中包含相关对象的字段来工作。因此,select_related在同一数据库查询中获取相关对象。但是,为了避免加入“多”关系会产生更大的结果集,select_related仅限于单值关系 - 外键和一对一。
另一方面,prefetch_related对每个进行单独查找 关系,并在Python中“加入”。这允许它 预取多对多和多对一对象,这是无法完成的 使用select_related,除了外键和一对一 select_related支持的关系。 more here
如果你的关系没有在你预取的类中直接定义,你可以使用classname_set来产生反向关系
这样的事情应该有效:
Vendors.objects.select_related('legal_entities')
.prefetch_related('legal_entities__legalentitiesdetails_set')