Я хочу сделать два запроса в Django - PullRequest
0 голосов
/ 27 сентября 2018

Использование django.Filter () для поиска или фильтрации сведений о сообщениях, уже сохраненных в django.

Использование Q из django для поиска в наборе запросов.используя флажок, чтобы этот фильтр () добавлял фильтр на мою веб-страницу, когда -

/? q = Бангалор

Я получаю правильное значение как

LOCATION  BANGALORE  PUNE 
ujjwal
56789
hgjk@hgjhk.vds
bottle
bisleri
bangalore
Sept. 20, 2018, 3 p.m.

но когда я выбираю оба флажка и выполняю поиск:

? Q = Бангалор & q = Пуна

, если вы заметили вышеуказанный URL, он выполняет операции «&» (и) и, скорее, я хочу показать в поиске данные любого из значений.Предположим, что только в базе данных Бангалор сохранен, но не в Пуне или наоборот.Это ничего не показывает...

мой код:

if query:
   queryset = queryset.filter(
   Q(Name__icontains = query) |      
   Q(Location__icontains= query) ) 

Надеюсь, я смогу помочь вам понять мою ситуацию ..

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Я думаю, что вы должны быть в состоянии сделать что-то вроде этого:

from functools import reduce

query = request.GET.getlist('q')

queryset = queryset.filter(
    reduce(lambda x, y: x | y,
           [Q(Name__icontains=q) | Q(Location__icontains=q) for q in query]
    )
)

Это создаст Q объект, or, объединяющий каждый поисковый термин.

0 голосов
/ 27 сентября 2018

Как сказано в Django Document , вы можете использовать этот код для доступа к списку query_params с тем же ключом:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]

также извлекать этот ответтоже.

...