我无法使用Django ORM进行此查询。 如何进行内部联接,如何执行此查询并仅返回我想要的列?
SELECT establecimiento.nombre, categoria.titulo
FROM establecimiento INNER JOIN
categoria ON establecimiento.categoria = categoria.id
答案 0 :(得分:3)
基于回复pdxwebdev的评论中的信息(您声明了外键字段),这很简单。 Django自动化了外键关系所需的大部分连接行为。
要精确复制该查询,包括仅从联接中选择两个字段,values
,values_list
或only
中的任何一个都应该执行此操作,具体取决于您要获取的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