Reputation: 31
def get_queryset(self):
result = Tenants.objects.all()
filters = self.request.GET.get('filter')
if filters is not None:
filters = filters[1] if filters[1] == ',' else filters
filters_list = filters.split(',')
filter_result = Tenants.objects.none()
for value in filters_list:
filter_result = filter_result | result.filter(Q(business_type__icontains=value)
|Q(category__icontains=value))
return filter_result
return result.all()
here i want the query parameters to be business_type and category when using get method and checking the data i am only able to filter one field either business_type or category
when using filter twice like /?page=1&filter=business_type&filter=category then i am getting the data i want
but i need the data when the url is like /?page=1&filter=business_type,category
Upvotes: 1
Views: 216
Reputation: 5884
Here can be used lookup in
(Django Docs) filter business_type__in=filters.split(",")
.
def get_queryset(self):
result = Tenants.objects.all()
filters = self.request.GET.get('filter')
if filters:
filter_result = result.filter(business_type__in=filters.split(","))
return filter_result
return result
Upvotes: 1
Reputation: 477607
You can query with:
def get_queryset(self):
result = Tenants.objects.all()
filters = self.request.GET.getlist('filter')
if not filters:
return Tenants.objects.all()
Tenants.objects.filter(
Q(*[
Q(business_type__icontains=value) | Q(category__icontains=value)
for filter in filters
for value in filter.split(',') if value
],
_connector=Q.OR
)
)
Upvotes: 1