如何使用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])
答案 0 :(得分:1)
您可以通过__
(两个下划线)遍历关系。所以你想要的是:
Service.objects.select_related('visitrecordid__patientno')