Django filter中用contains和icontains区别

本文深入探讨了SQL查询中的大小写敏感性和不敏感性选项,通过对比'contains'和'icontains'的区别,详细解释了如何在Django ORM中使用这些过滤条件。此外,还介绍了如何构建复杂的查询,包括使用Q对象进行OR连接,以及如何处理搜索关键词,最终返回包含状态、数据、当前页码和总页数的字典。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qs.filter(name__contains="e")

qs.filter(name__icontains="e")

对应sql

'contains': 'LIKE BINARY %s',
'icontains': 'LIKE %s',

其中的BINARY是 精确大小写
而’icontains’中的’i’表示忽略大小写

开发项目中用到的

  return_info = dict()
        q_obj = Q()
        q_obj.connector = 'OR'
        for x in search_cols:
            q_obj.children.append((x + "__icontains", keyword))
        q_objs = (q_obj,) if keyword else tuple()
        filters = filters if filters else dict()
        country_datas = country_dal.get_infos_dict(
            q_objs=q_objs,
            filters=filters,
            order_by=order_by,
            values=values
        )
        if country_datas is not None:
            page_helper = PageHelper(obj_list=country_datas, page=page, page_size=page_size)
            common_datas = page_helper.get_object_list()
            return_info["status"] = True
            return_info["data"] = common_datas
            return_info["page"] = page_helper.get_number()  # 当前页码
            return_info["page_count"] = page_helper.get_num_pages()  # 总共分页数
        else:
            return_info["status"] = False
            return_info["failed_data"] = "请求参数错误 关键词:%s 关键字匹配列表:%s 查询条件列表:%s 排序列表:%s 数据列表:%s" \
                                         % (str(keyword), str(search_cols), str(filters), str(order_by), str(values))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值