Django ORM和链式select_related

时间:2019-11-25 23:23:42

标签: django django-models django-orm

如何使用Django ORM进行此查询?

这是一个多联接,从表到表链接。

有关select相关(https://docs.djangoproject.com/en/2.2/ref/models/querysets/#select-related)的Django文档给出了一个示例,其中三个表通过外键“链接”:图书->作者->城市。

  

b = Book.objects.select_related('author__hometown')。get(id = 4)

     

p = b.author#不打数据库。

     

c = p.hometown#不打数据库。

“不命中数据库”必须表示select查询将三个表联接在一起。 因此,查询生成的sql应该显示(我尚未检查)。

我的模型基于对现有数据库的分析,带有定义明确的外键。 我将在下面摘录这些模型。

ref

我可以做的第一次加入

SELECT *
     FROM  SERVICE 
     INNER JOIN VISIT ON SERVICE.VisitRecordID = VISIT.VisitRecordID 
     INNER JOIN  CMPATIENT ON VISIT.PatientNo = CM_PATIENT.PATIENT_ID

这使sql像这样:

q = Service.objects.select_related('visitrecordid',).all()

所以我得到的是外部联接,而不是内部联接,这是一个问题。 但最重要的是,我不知道为什么CmPatient不参与查询。

模型(摘录)

SELECT * FROM [SERVICE] LEFT OUTER JOIN [VISIT] ON ([SERVICE].[VisitRecordID] = [VISIT].[VisitRecordID])

1 个答案:

答案 0 :(得分:1)

您可以通过__(两个下划线)遍历关系。所以你想要的是:

Service.objects.select_related('visitrecordid__patientno')