Django模型搜索连接字符串

时间:2013-11-28 14:45:25

标签: python sql django django-models

我正在尝试使用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?

谢谢

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

你也可以在你的代码中为此编写原始查询,稍后你可以连接。

示例:

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

在原始查询中保留一件事你必须总是获取表的主键,这是必需的。这里organization_id是contact_organization表的主键。

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