2013-11-28 6 views
0

Я пытаюсь использовать модель Django для записи, но затем возвращаю конкатенированное поле двух разных таблиц, соединенных внешним ключом.Django model search concatenated string

я могу это сделать в 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.

И это зависит от вас, какой из них полезен и прост (необработанный запрос или запрос модели).