Django对象请求的动态过滤数量

3 投票
1 回答
670 浏览
提问于 2025-04-15 17:41

我想知道怎么做类似这样的事情:

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')

撰写回答