2009-12-24 4 views
4

Dans mon views.py J'ai une méthode:filtre en utilisant l'objet Q avec la dynamique de l'utilisateur?

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

** Mon cas tag_selected est la case à cocher valeurs que l'utilisateur vérifié J'ai des problèmes avec tag_selected (la liste = 1,2,3 ,. ..) qui passent de mon 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? 

par exemple

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

Répondre

14

Cela fonctionne aussi bien pour les conditions uniques et multiples:

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 Quel est l'opérateur dans votre code ?? – kn3l

+0

Un module dans le fichier stdlib. –

+0

Le nom global 'opérateur' n'est pas défini – kn3l

Questions connexes