Django - 原始SQL查询 - 连接查询的过程是什么

8
1个回答

7

重要的不是连接,而是列名。例如,您可以执行以下操作:

SELECT table.id, other_table.name AS name from table join other_table using (id)

将其传递到您的table模型中。然后,Django会将other_table中的名称视为来自table的名称,并提供正常的table实例。虽然我无法想象您为什么要这样做...

重要的是要记住,Django使用非常简单的映射从您的SQL到其模型结构。如果您想要规避它,但最终可能会得到一些难以维护的代码。


我链接的那个页面说它使用表名来查找要使用哪个模型。所以我想知道,如果我正在连接两个不同模型的表,它怎么知道要使用哪个模型? - Greg
我不认为它是这样说的。你将查询传递给 ModelName.objects.raw(query),因此你会得到 ModelName 对象。它所说的是,你需要在原始 SQL 中使用的表名被创建为 appname_modelname。 - Andrew Wilkinson
如果我在原始查询中执行连接操作,那么连接的表字段是否就像通过 annotate() 添加到模型(从中执行查询)中的字段一样?请注意,我在这里是因为我的查询跨越了多对多关系,并且我的搜索条件是针对相关表的,我正在寻找一种只接收与该条件匹配的组合记录的方法。我来这里的原因是因为我们为每个由6或7个表组成的多个组合视图构建了高级搜索界面,而在 M:M 表上进行的搜索会产生不符合搜索条件的记录。 - hepcat72
而且,在原始查询中,我如何引用连接表?这些表在ORM中被混淆了。 - hepcat72

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接