Django динамический номер фильтра для запроса объектов - PullRequest
3 голосов
/ 06 января 2010

Как мне сделать что-то вроде этого:

products_list = Product.objects.all()

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

Это не работает.

1 Ответ

2 голосов
/ 06 января 2010

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

...