数目不定的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。

你可能感兴趣的:(数目不定的OR操作【django ORM】【model】【2022-11-17】)