Python 对象请求的Django动态筛选器数

Python 对象请求的Django动态筛选器数,python,django,django-models,Python,Django,Django Models,我怎样才能做这样的事情: products_list = Product.objects.all() for key in keywords: products_list = products_list.filter(name__icontains=q) 这不起作用。您正在筛选包含多个AND语句的列表,您需要OR语句。试着这样做: from django.db.models import Q products_list = Product.objects.all() orq = No

我怎样才能做这样的事情:

products_list = Product.objects.all()

for key in keywords:
    products_list = products_list.filter(name__icontains=q)

这不起作用。

您正在筛选包含多个AND语句的列表,您需要OR语句。试着这样做:

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_u-icontains='prod1')|Q(name_u-icontains='prod2')

实际上这不起作用
products\u-list=Product.objects.all()
然后是
products\u-list=products\u-list.filter(orq)
但是我可以直接做
产品_list=Product.objects.filter(orq)
而且我工作得很好:)顺便说一句,我想如果我改变| with&我可以有一个and而不是一个ORout of interest
Product.objects.all()
检索所有产品
products\u list.filter(name\u icontains=q)
将只过滤并返回满足查询的产品,这是Django进行过滤查询的方式吗?将数据库中的所有产品放入内存,然后过滤,而不是指定只返回所需数据的条件的查询?只是一个问题。实际上,你不能这样做
product=product.objects.SOMETHING
和重用产品。要继续,你应该让所有的过滤器与解决方案一致。