Вы фильтруете список несколькими операторами 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__icontains='prod1') | Q(name__icontains='prod2')
.