Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ORM和链式选择相关_Django_Django Models_Django Orm - Fatal编程技术网

Django ORM和链式选择相关

Django ORM和链式选择相关,django,django-models,django-orm,Django,Django Models,Django Orm,如何使用Django ORM执行此查询 它是一个多连接,从一个表链接到另一个表 关于selectrelated()的Django文档给出了一个例子,其中三个表通过外键“链接”起来:Book->Author->City 说 b=Book.objects。选择与之相关的('author\u homely')。获取(id=4) p=b.author没有进入数据库 c=p.homightry#没有进入数据库 “不命中数据库”必须意味着selectquery连接三个表。 因此,查询生成的sql应该显示(我

如何使用Django ORM执行此查询

它是一个多连接,从一个表链接到另一个表

关于selectrelated()的Django文档给出了一个例子,其中三个表通过外键“链接”起来:Book->Author->City

b=Book.objects。选择与之相关的('author\u homely')。获取(id=4)

p=b.author没有进入数据库

c=p.homightry#没有进入数据库

“不命中数据库”必须意味着selectquery连接三个表。 因此,查询生成的sql应该显示(我还没有检查)

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

SELECT *
     FROM  SERVICE 
     INNER JOIN VISIT ON SERVICE.VisitRecordID = VISIT.VisitRecordID 
     INNER JOIN  CMPATIENT ON VISIT.PatientNo = CM_PATIENT.PATIENT_ID
我能做的第一件事

q = Service.objects.select_related('visitrecordid',).all()
这使得sql类似于:

SELECT * FROM [SERVICE] LEFT OUTER JOIN [VISIT] ON ([SERVICE].[VisitRecordID] = [VISIT].[VisitRecordID])
所以我得到的是左外连接,而不是内连接,这是一个问题。 但最重要的是,我不知道为什么CmPatient不参与查询

模型(摘录)


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

Service.objects.select_related('visitrecordid__patientno')

你能分享你的django模型和你试图在这个查询中获取的数据(即列)吗?谢谢,我现在意识到我不知道如何阅读文档。附带问题,你是否与现有数据库集成?您的模型没有像我期望的那样定义“普通”django模型。特别是将_id作为id,使用db_列,并将外键定义为patientno和visitrecordid(我建议分别使用patient或cm_patient和visit)。没错,这些模型是通过在大型数据库上运行manage.py inspectdb创建的。它也做得很好。啊,好的。那就忽略我的建议吧。嗯,差不多。我仍然可能会重命名关系字段,以便在ORM方面更有意义。在这些情况下,请使用
prefetch\u related
Service.objects.select_related('visitrecordid__patientno')