2013-11-28 112 views
0

我想使用一个Django模型来记录,但然后返回一个外键连接的两个不同表的连接字段。Django模型搜索连接字符串

我能做到这一点在SQL这样的:

SELECT 
    location.location_geoname_id as id, 
    CONCAT_WS(', ', location.location_name, region.region_name, country.country_name) AS 'text' 
FROM 
    geonames_location as location 
JOIN 
    geonames_region as region 
ON 
    location.region_geoname_id = region.region_geoname_id 
JOIN 
    geonames_country as country 
ON 
    region.country_geoname_id = country.country_geoname_id 
WHERE 
    location.location_name like 'location' 
ORDER BY 
    location.location_name, region.region_name, country.country_name 
LIMIT 10; 

有一个更清洁的方式做到这一点使用Django模型?或者我需要为这个使用SQL吗?

谢谢

回答

0

你真的需要SQL来返回连接字段吗?为什么不以通常的方式查询模型(使用select_related()),然后在Python中连接?或者,如果你担心查询比你更需要的列,使用values_list

locations = Location.objects.values_list(
    'location_name', 'region__region_name', 'country__country_name') 
location_texts = [','.join(l) for l in locations] 
0

你也可以写为这个原始查询在你的代码这样的,以后你可以连接。

例子:

org = Organization.objects.raw('SELECT organization_id, name FROM organization where is_active=1 ORDER BY name') 

保持一件事你必须总是取表的主键的原始查询,这是强制性的。这里organization_id是contact_organization表的主键。

它取决于你哪一个是有用和简单的(原始查询或模型查询)。