1

Using django.Filter() to search or filter the details of posts already saved in django.

Using Q of django to make search in queryset. using checkbox, so that this filter(), to add a filter in my webpage when --

/?q=Bangalore

Im getting correct value as

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

but when I am selecting both of the checkbox and perform search:

?q=Bangalore&q=Pune

if you notice the above url , it is performing '&' (and) opertion and, rather i want to show in search, the data of either of the value. Suppose, in database only, Bangalore is saved but not pune or vice-versa. It is showing nothing . ..

my code:

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

Hope I am able to make you understand my situation..

Ivan Starostin
  • 8,798
  • 5
  • 21
  • 39
sumit roy
  • 11
  • 1

2 Answers2

1

I think you should be able to do something such as this:

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]
    )
)

That will build up a Q object, or-ing each search term together.

Will Keeling
  • 22,055
  • 4
  • 51
  • 61
0

as the Django Document says, you can use this code to access a list of query_params witch have same key:

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

also checkout this answer too.

aasmpro
  • 554
  • 9
  • 21