Django ORM内部联接

2024-09-23 00:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: djangofromidonormselectinnerjoin
2条回答

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

为了精确地复制该查询,包括只从连接中选择两个字段,valuesvalues_listonly中的任何一个都应该根据您想要返回的Python对象进行复制。例如,这里有一个使用values检索可iterable queryset of dictionary的查询:

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

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

当您使用__跟踪这样的外键关系时,Django将自动执行内部连接。

您还可以对queryset使用select_related来要求它执行联接,即使您没有检索特定字段。例如:

Establecimiento.objects.select_related('categoria')

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

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

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

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

相关问题 更多 >