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

Django 使用Q对象进行过滤,并从用户处进行动态过滤?,django,django-q,Django,Django Q,在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),

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

这适用于单个和多个条件:

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

未为运算符定义全局名称“运算符”。idseq=tag_selected.split(',')print idseq#It display:[u'2',u'3']tagqs=reduce(operator.or.[uq(tag_uid=x)for x in idseq])出现错误。感谢您的帮助。:)int()的文本无效,以10为基数:“2,3”感谢Ignacio Vazquez Abran有效,我修复了它…)为此,您需要使用functools import-reduce中的导入操作符