如何不区分大小写检索Django模型中的指定元素?
Django 不区分大小写查询模型字段的解决方案
解决这个问题有几种实用的方式,根据你的场景选择即可:
使用
__iexact查询条件:这是Django ORM原生支持的不区分大小写精确匹配方法,直接替换普通的等于匹配逻辑就行:User.objects.get(user_name__iexact=name)不管传入的
name是Hello World还是hElLO wOrLD,只要字符内容和模型里的user_name一致,就能匹配成功,不需要手动处理大小写。统一转小写匹配:如果你的数据库支持字符串小写转换函数(比如MySQL、PostgreSQL都支持),可以同时把字段和查询参数转成小写后再匹配:
User.objects.get(user_name__lower=name.lower())要是想保证跨数据库兼容性,也可以用Django的
Lower函数实现:from django.db.models.functions import Lower User.objects.annotate(lower_user_name=Lower('user_name')).get(lower_user_name=name.lower())你之前只转了
name的小写,没处理模型里的user_name字段,所以当模型里存的是HELLO WORLD时匹配失败,这个方法就是把两边都转成统一的小写再对比,自然能匹配上。
注意:使用get()时要确保只有一条匹配结果,若存在多条符合条件的记录,会抛出MultipleObjectsReturned异常;如果不确定结果数量,换成filter(...).first()会更稳妥。
内容的提问来源于stack exchange,提问作者Назар Головач
相关产品推荐
相关产品推荐

