2013-11-28 71 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表的主鍵。

它取決於你哪一個是有用和簡單的(原始查詢或模型查詢)。