Django模型搜索连接字符串

2024-06-15 00:03:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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来完成这个任务?你知道吗

谢谢


Tags: djangoname模型idsqlonas记录
2条回答

您真的需要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]

您也可以像这样在代码中为此编写原始查询,然后可以连接起来。你知道吗

示例:

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

在一个原始查询中保留一个东西,您必须始终获取表的主键,这是必需的。这里organization\u id是contact\u organization表的主键。你知道吗

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

相关问题 更多 >