代码之家  ›  专栏  ›  技术社区  ›  tree em

使用Q对象进行过滤,并从用户处进行动态过滤?

  •  5
  • tree em  · 技术社区  · 15 年前

    在my 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
    

    从我的url传递的标记_(列表=1,2,3,…)有问题

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

    例如

    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])
                                                           ...
                                                            )
    
    1 回复  |  直到 9 年前
        1
  •  18
  •   Ignacio Vazquez-Abrams    15 年前

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