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

如何在Django过滤查询中正确联合筛选金额单值与范围列?

修正后的Django查询语句

原查询未区分单值金额(amount非0)和范围金额(amount为0)的场景,导致不符合条件的数据被错误匹配。你需要明确两种场景的判断逻辑:

  • 单值金额场景:amount不为0,且值落在目标范围(100000, 300000)内
  • 范围金额场景:amount为0,且amount_min不小于100000、amount_max不大于300000

修正后的查询代码:

import datetime
from django.db.models import Q

Jobs.objects.filter(
    Q(created_on__gte=datetime.datetime.now() - datetime.timedelta(days=30)),
    Q(amount__gt=0, amount__range=(100000, 300000)) | 
    Q(amount=0, amount_min__gte=100000, amount_max__lte=300000)
)

逻辑说明

  • Q(amount__gt=0, amount__range=(100000, 300000)) 限定单值金额的有效范围,排除amount=25000这类不在目标区间的数据
  • Q(amount=0, amount_min__gte=100000, amount_max__lte=300000) 限定范围金额的有效区间,仅匹配第二条数据
  • 两个场景用|(逻辑或)连接,再与created_on的时间条件默认以AND结合,最终只返回符合预期的第二条数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:35:09