我正在尝试使用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 :(得分: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表的主键。
这取决于你哪一个是有用和简单的(原始查询或模型查询)。