Я решил эту проблему, используя exec для генерации кода из строки, используя icontains вместо in. Я признаю, что это небрежно и не элегантно, и его следует проверять на предмет безопасности, но это сработало.untested / pseudocode:
query = "product_results = Product.objects.filter("
for word in words:
query += "Q(title__icontains(word))|"
query += "Q(brand__icontains(word))|"
query += "Q(description__icontains(word))|"
query = query[:-1] # remove the trailing |
query += ")"
exec("product_results = "+query)
Опять же, это, вероятно, не рекомендуется, и я уверен, что есть лучший способ сделать это, но это однажды исправило меня, поэтому я решил поделиться.Также обратите внимание, что я больше не использую этот код, так как я переключился на sqlalchemy, который немного упрощает динамические запросы такого типа, поскольку объект "or" принимает список.