2017-09-20 111 views
0

我有以下代碼。用kwargs過濾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)) 

對於這個代碼我收到一個錯誤,類型錯誤:「bool的」對象有沒有屬性「的GetItem」。我打算用這個替換下面的代碼。

q = Elements.objects.all() 
id = kwargs.get("id") 
active = kwargs.get("is_active") 
q.filter(id=id,is_active=active) 

如何修復這樣的錯誤?

+0

請 「用'ID = kwargs.get(ID'(ID」)''更改ID = kwargs.get)「 由於這是一個非常小的變化,我不能編輯。你的問題。什麼是'Q'? – GLR

+1

爲什麼不簡單查詢?'q = Elements.objects.filter(id = kwargs.get(「id」),active = kwargs.get(「is_active」))' –

+0

@RomanMindlin我想要一個更好的方法,當字段數量很大,參數是可選的。 –

回答

1

你應該使用: q = Elements.objects.filter(**kwargs)