数目不定的OR操作【django ORM】【model】【2022-11-17】

使用django ORM 访问数据库,如果想实现or操作,需要用到django.db.models.Q,形如:

from django.db.models import Q
from myApp.models import myDBTable

rows = myDBTable.objects.filter(Q(col_name=col_value1)|Q(col_name=col_value2))  # select * from my_db_table where (col_name = col_value1 or col_name=col_value2)

现在我有一个需求,用户会从前端给我传一个列表过来,我要去搜索出数据库表中某一列匹配列表中任何一项的数据,也就是多个or的情况。但是在执行代码之前,我是不知道用户会给我传哪些参数、传多少个参数的。简单思考了一下,想到可以这样做:

from django.db.models import Q
from myApp.models import myDBTable

filter = None
for item in params_list:
    filter = Q(col_name=item) if filter is None else filter|Q(col_name=item)

rows = myDBTable.objects.filter(filter)

怎么想到的:Q(col_name=col_value1)应该是一个对象,Q(col_name=col_value1)|Q(col_name=col_value2) 应该也是一个对象。那么既然是对象,就可以用上面的这种方法处理。

经过测试是可行的。

done。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容