Django ORM INNER JOIN

时间:2014-01-25 20:05:32

标签: python django orm django-models

我无法使用Django ORM进行此查询。 如何进行内部联接,如何执行此查询并仅返回我想要的列?

SELECT     establecimiento.nombre, categoria.titulo
FROM         establecimiento INNER JOIN
                      categoria ON establecimiento.categoria = categoria.id

2 个答案:

答案 0 :(得分:3)

基于回复pdxwebdev的评论中的信息(您声明了外键字段),这很简单。 Django自动化了外键关系所需的大部分连接行为。

要精确复制该查询,包括仅从联接中选择两个字段,valuesvalues_listonly中的任何一个都应该执行此操作,具体取决于您要获取的Python对象背部。例如,这是一个使用values来检索字典的可迭代查询集的查询:

Establecimiento.objects.values('nombre', 'categoria__titulo')

values_list将检索元组而不是字典,only将检索Establecimiento个实例,其中除了这两个以外的所有模型字段都被延迟(它们尚未从数据库中检索但是将根据需要查找。)

当你使用__跟随这样的外键关系时,Django会自动进行内连接。

即使您没有检索特定字段,也可以在查询集上使用select_related来要求它进行连接。 EG:

Establecimiento.objects.select_related('categoria')

这应生成SELECT * from ...的查询,并返回已将Establecimiento数据加载到内存中的categoria个实例的查询集。

答案 1 :(得分:0)

我不确定我理解这个问题。 establecimiento.categoria只需要成为Categoria模型的外键字段。 categoria.id是主键,因此将自动完成。

仅返回某些列,只返回.only()方法。

https://docs.djangoproject.com/en/dev/ref/models/querysets/#only