2014-01-25 145 views
1

我一直没有能够用Django ORM做这个查询。 如何进行内连接,如何做这个查询并只返回我想要的列?Django ORM INNER JOIN

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

你能显示你的模型定义吗?如果您在两个模型之间声明了正确的ForeignKey字段,这非常简单。 –

+0

我怎样才能在Django中做一个简单的INNER JOIN,因为我在SQL中做了这个,但是我不能在Django中做这个查询,我怎样才能使用Django的两个模型ORM – user3236034

+0

[django query with ... objects.raw](http://stackoverflow.com/questions/21359710/django-query-with-objects-raw) –

回答

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 ...查询,并返回该有自己的categoria数据已经加载到内存中Establecimiento实例的查询集。

0

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

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

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

+0

我有两个模型:Establecimiento和Categoria,Establecimiento模型有一个ForeignKey(Categoria)。然后我要显示Establecimiento的名称和关系的Categoria的名称。 – user3236034