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

