前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一日一技】Django不定项数的“或查询”

【一日一技】Django不定项数的“或查询”

作者头像
青南
发布2019-04-25 15:03:55
1K0
发布2019-04-25 15:03:55
举报
文章被收录于专栏:未闻Code未闻Code

Django

在Django中,假设有一个Model名叫Product,它有一个字段叫做description,类型对应MySQL的Text

如果要对它进行与查询,多个条件同时满足,相对比较简单。例如,我希望查询:description字段同时包含关键字促销, 打折, 限时

from django.db.models import Q

item = Product.objects.filter(Q(description__contains='促销') & Q(description__contains='打折') & Q(description__contains='限时'))

如果这些关键词是通过一个列表传进来的,但是我并不知道里面有哪些关键字,也不知道有几个关键字,那么还可以使用链式查询:

item = Product.objects

for keyword in keywords:

item = item.filter(description__contains=keyword)

循环结束以后,item就是同时满足所有关键字的搜索对象了。对于同一张表,上面两种写法是等效的。

那么问题来了,与查询很好写,或查询呢?

例如,查询Product,找到description字段包含下述关键字的任意一个促销, 打折, 限时的商品。

首先,查询是不能用链式查询的。

如果关键字是确定的,当然你可以这样写:

from django.db.models import Q

item = Product.objects.filter(Q(description__contains='促销') | Q(description__contains='打折') | Q(description__contains='限时'))

如果关键字是从外面传进来的怎么办呢?

如果关键字列表数量恒定,那么你可以这样写:

from django.db.models import Q

keywords = ['促销', '打折', '限时']

item = Product.objects.filter(Q(description__contains=keywords[0]) | Q(description__contains=keywords[1]) | Q(description__contains=keywords[2]))

现在关键字的数量不确定,可能1个,可能3个,可能10个,这个时候怎么办?

此时,就需要把过滤条件单独抽出来进行或操作了:

from django.db.models import Q

keywords = ['促销', '打折', '限时']

item = Product.objects

if keywords:

filters = Q(description__contains=keywords[0])

for keyword in keywords[1:]:

filters |= Q(description__contains=keyword)

item = item.filter(filters)

print(item.count()) # 此时打印出来的是所有在description字段包含任一关键字的商品总量

使用这种方式,就可以在Django中实现不定项数的或查询了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档