Пишу простую форму поиска по определенной модели. Назовем модель Орчард
и дадим ей атрибуты яблоки
, апельсины
и груши
просто для демонстрации.
Таким образом, форма не требует заполнения всех полей. Таким образом, вы можете выполнять поиск по яблокам
и апельсинам
, но не по грушам. Мне их нужно фильтровать следующим образом:
Orchard.objects.filter(apples=request.GET.get('apples'), oranges=request.GET.get('oranges'), pears=request.GET.get('pears'))
но если pears
пусто, результаты никогда не вернутся.
Моей первой мыслью было использовать объекты Q
, примерно так:
from django.db.models import Q
options = {}
options['apples'] = request.GET.get('apples')
options['oranges'] = request.GET.get('oranges')
options['pears'] = request.GET.get('pears')
queries = None
for key in options:
if options[key] != u'':
if queries:
queries &= Q(key=options[key]) # <=== problem here
else:
queries = Q(key=options[key]) # <=== same problem here
results = Orchard.objects.filter(queries)
Проблема возникает в этих отмеченных строках. Я, очевидно, не могу просто использовать «ключ» в качестве ключевого слова атрибута, потому что он не принимает строку, а, по сути, принимает переменную.
Итак ... как мне обойти это?
Если нет известного решения этой проблемы, не связанного с Q
. Это тоже было бы полезно.