Django对象请求的动态过滤数量
我想知道怎么做类似这样的事情:
products_list = Product.objects.all()
for key in keywords:
products_list = products_list.filter(name__icontains=q)
这个方法不行。
1 个回答
2
你现在用好几个“与”的条件在过滤列表,但你其实想用“或”的条件。可以试试下面这样的写法:
from django.db.models import Q
products_list = Product.objects.all()
orq = None
for key in keywords:
thisq = Q(name__icontains=q)
if orq:
orq = thisq | orq
else:
orq = thisq
products_list = products_list.filter(orq)
你可能可以把上面的代码整理得更简洁一些,但主要的思路是创建一个叫做 orq
的变量,这个变量的内容基本上是 Q(name__icontains='prod1') | Q(name__icontains='prod2')
。