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

如何在Django中无需原生SQL,用Travel模型过滤RoutePoint模型对象?

解决方案

1. 筛选目标行程记录

从请求中获取start_date和end_date后,先过滤出时间范围内的Travel数据:

start_date = request.GET.get('start_date')  # 根据实际请求方式获取参数
end_date = request.GET.get('end_date')

target_travels = Travel.objects.filter(
    begin__gt=start_date,
    end__lt=end_date
)

2. 匹配对应行程的轨迹点

使用Django ORM的Exists子查询,精准筛选属于目标行程车辆、且时间落在对应行程起止区间内的RoutePoint:

from django.db.models import Exists, OuterRef

filtered_route_points = RoutePoint.objects.filter(
    # 确保轨迹点所属车辆存在符合条件的行程
    vehicle__travels__in=target_travels,
    # 确保轨迹点时间落在该车辆某条目标行程的时间区间内
    Exists(
        target_travels.filter(
            vehicle=OuterRef('vehicle'),
            begin__lte=OuterRef('datetime'),
            end__gte=OuterRef('datetime')
        )
    )
)

说明:Exists子查询会为每个RoutePoint校验是否存在对应匹配的Travel记录,既保证车辆归属正确,又避免出现车辆有符合条件的行程,但轨迹点时间不在任何行程区间内的无效数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:17:18