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

如何在Django中基于两个字段的比较关系过滤Model数据?

Django中基于模型字段间关系过滤查询集的正确方法

你的代码里用lambda作为filter()的参数是行不通的——Django的QuerySet是基于SQL构建的,filter()需要接收ORM查询表达式,而不是Python层面的lambda函数(后者只能在已加载到内存的对象列表里用,比如对qs.all()转成列表后过滤,但效率极低)。

正确实现方式(推荐)

使用Django的F()表达式,它可以直接在数据库层面比较两个字段的值,性能最优:

首先需要导入F:

from django.db.models import F

然后修改get_queryset方法:

def get_queryset(self):
    qs = super().get_queryset()
    # ... 其他业务逻辑
    if condition:
        # 用F()引用second_field,实现first_field小于second_field的过滤
        return qs.filter(first_field__lt=F('second_field'))
    return qs

额外拼写修正提示

你的代码里有两处拼写错误,建议修正避免后续报错:

  • Model里的IntegerFiled → IntegerField(缺少字母i)
  • 序列化器类名ExmapleModelrSerializer → ExampleModelSerializer(拼写错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:12:15