如何在Django查询筛选中匹配数据库字段?
在Django ORM中实现字段与字段的匹配查询
嘿,这个问题我之前也踩过坑!你直接写column1=column2的话,Django会把column2当成一个普通的Python变量来解析,而不是数据库表中的字段,所以根本达不到你要的「字段等于字段」的查询效果。
要实现SQL里column1=column2这种字段间的比较,你需要用到Django提供的F表达式,它专门用来引用模型的字段值,直接在数据库层面完成字段间的运算或比较,不用把数据拉到Python内存里处理。
具体步骤:
- 首先导入
F类:
from django.db.models import F
- 修改你的查询语句,用
F('字段名')来替代直接写字段名:
qs = Docs.objects.filter(mlal_id_no=8, column1=F('column2'))
这样生成的SQL就完全符合你的需求了:
SELECT * FROM docs WHERE mlal_id_no=8 AND column1=column2;
额外小技巧:
F表达式还支持字段间的运算,比如你想查询column1比column2大5的记录,可以这么写:
qs = Docs.objects.filter(column1=F('column2') + 5)
另外注意一下,Django的模型类通常是首字母大写的(比如Docs而不是docs),如果你的模型确实命名为小写的docs那没问题,但建议遵循PEP8规范来命名模型类哦。
内容的提问来源于stack exchange,提问作者user12510360
相关产品推荐
相关产品推荐

