Filter using a Q object with dynamic from user?

In my view.py, I have a method:

#...... def get_filter_result(self, customer_type, tag_selected): list_customer_filter=[] customers_filter = Customer.objects.filter(Q(type__name=customer_type), Q(active=True), Q(tag__id=tag_selected)) for customer_filter in customers_filter: customer_filter.list_authorize_sale_type = sale_type_selected(customer_filter.authorize_sale_type) list_customer_filter.append(customer_filter) return list_customer_filter 

** My tag_selected case is the checkboxes that the user checked. I have problems with tag_selected (this is list = 1,2,3, ...) that go from my url

 /?customer_type=TDO&tag=2 ===>filter okay /?customer_type=TDO&tag=3 ===>filter okay ?customer_type=TDO&tag=2,3 ===>How Can I add And condition in filter? 

eg

 if len(tag_selected)==1: customers_filter = Customer.objects.filter(Q(type__name=customer_type), Q(active=True), Q(tag__id=tag_selected)) else: customers_filter = Customer.objects.filter(Q(type__name=customer_type), Q(active=True), Q(tag__id=tag_selected[0]) Q(tag__id=tag_selected[1]) Q(tag__id=tag_selected[2]) ... ) 
+4
source share
1 answer

This works for both one and several conditions:

 idseq = request.POST['tag'].split(',') tag_qs = reduce(operator.or_, (Q(tag__id=x) for x in idseq)) Customers.objects.filter(..., tag_qs) 
+14
source

All Articles