2009-12-24 2 views
4

나는 방법이 있습니다사용자가 동적으로 Q 개체를 사용하여 필터를 사용 하시겠습니까? 내 views.py에서

#...... 
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 

** tag_selected 내 경우 체크 박스는 사용자가 내가 = 목록입니다 (1,2,3 tag_selected있는 문제가 을 확인하는 것이 값이다 ,. ..) 예를 들어이 단일 및 여러 조건에 모두 작동

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

답변

14

내 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? 

에서 통과 :

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

@Ignacio Vazquez-Abran 코드의 연산자는 무엇입니까 ?? – kn3l

+0

stdlib에있는 모듈. –

+0

전역 이름 'operator'가 정의되지 않았습니다. – kn3l