Django orm 通过raw 调用sql 查询被包含,字段包含在搜索字段中

本文探讨了在Django项目中,当ORM查询无法满足复杂需求时,如何结合使用SQL语句进行文章标签的精确搜索。通过示例代码展示了如何利用ORM的raw方法执行SQL查询,解决多对多关系下标签查询的重复问题。

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

在Django orm的使用中没有找到 被包含的查询操作(有知道的望告知下,谢谢 )。 于是想到使用sql语句进行查询,使用sql里的 LIKE CONCAT ,使用orm  通过raw  调用sql 的方式

我要查询的是,文章标签包含在我要查询的语句中,标签和文章是ManyToMany的关系,代码如下

def ArticleList(req):
    search = req.GET.get('search') 
    artic = aiarticle.objects.filter(is_show=True).raw(
        "SELECT DISTINCT aiarticle.title,aiarticle.id,aiarticle.link FROM intelligentai_aiarticle as aiarticle,intelligentai_aitag as tag,intelligentai_aiarticle_tags WHERE aiarticle.id=intelligentai_aiarticle_tags.aiarticle_id AND tag.id=intelligentai_aiarticle_tags.aitag_id AND %s LIKE CONCAT(%s,tag.tag_name,%s)",
        params=[search, '%', '%'])
    data_list = aiarticleSerializers(artic, many=True) 
    return JsonResponse({"ret": 0, 'msg': 'success', 'lister': data_list.data})

因为文章可以有多个标签导致查询出来有重复  就在显示的字段前加了 DISTINCT 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值