【问题标题】:Django model search concatenated stringDjango模型搜索连接字符串
【发布时间】:2013-11-28 14:45:24
【问题描述】:

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

谢谢

【问题讨论】:

    标签: python sql django django-models


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      例子:

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

      在原始查询中保留一件事,您必须始终获取表的主键,这是强制性的。这里的organization_id 是contact_organization 表的主键。

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

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 2012-11-23
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        相关资源
        最近更新 更多