如何在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
相关产品推荐
相关产品推荐

