You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django一对多外键场景下如何筛选存在出发或到达路线关联的城市

问题原因

你的查询结果不符合预期的核心原因是反向关联名使用错误:你在Route模型中定义两个指向City的外键时,分别自定义了related_name参数为leaving_from和destination,因此City反向查询关联路线时,需要使用你自定义的关联名,而非默认的route前缀。你原来的写法中使用的关联路径route__leaving_from不存在,导致查询条件失效,才会返回不符合预期的结果。

正确写法

写法1:使用Q条件查询

直接通过自定义的反向关联名判断城市是否有关联的出发/目的地路线即可:

from django.db.models import Q

related_cities = City.objects.filter(
    Q(leaving_from__isnull=False) | Q(destination__isnull=False)
).distinct()

写法2:ID集合匹配(可读性更高)

先提取所有路线的出发地、目的地ID,合并去重后直接查询对应城市,适合数据量不大的场景:

# 提取所有路线的出发地、目的地ID
from_city_ids = Route.objects.values_list('leaving_from_id', flat=True)
to_city_ids = Route.objects.values_list('destination_id', flat=True)
# 合并去重后查询
all_related_ids = set(list(from_city_ids) + list(to_city_ids))
related_cities = City.objects.filter(id__in=all_related_ids)

内容的提问来源于stack exchange,提问作者eba alemayhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:24:02