Python 使用kwargs的Django滤波

Python 使用kwargs的Django滤波,python,django,Python,Django,我有以下代码 def alpha(**kwargs): q_obj_list = [Q(str(i), kwargs.get(i)) for i in kwargs.keys()] reduce(operator.and_, q_obj_list) return q_obj_list q = Elements.objects.all() q = q.filter(alpha(id=1, is_active=False)) 对于这段代码,我收到一个错误,它说TypeEr

我有以下代码

def alpha(**kwargs):
    q_obj_list = [Q(str(i), kwargs.get(i)) for i in kwargs.keys()]
    reduce(operator.and_, q_obj_list)
    return q_obj_list

q = Elements.objects.all()
q = q.filter(alpha(id=1, is_active=False))
对于这段代码,我收到一个错误,它说TypeError:“bool”对象没有属性“getitem”。我打算用这个替换下面的代码

q = Elements.objects.all()
id = kwargs.get("id")
active = kwargs.get("is_active")
q.filter(id=id,is_active=active)
如何修复此类错误?

您应该使用:
q=Elements.objects.filter(**kwargs)

请通过
id=kwargs.get(“id”)更改
id=kwargs.get(“id”)
。由于这是一个非常小的更改,我无法编辑您的问题。什么是
q
?为什么不简单查询?
q=Elements.objects.filter(id=kwargs.get(“id”),active=kwargs.get(“是active”))
@RomanMindlin我在请求一种更好的方法,以应对字段数量大且参数可选的情况。好的。
q=Elements.objects.filter(**kwargs)
?@RomanMindlin这种方法对我来说很好,可以作为首选答案。ty