2015-10-18 82 views
0

我是django的新手,並試圖過濾包含文本的多個字段。Django Q設置太多的值來解壓

columns = ['ticketId', 'checkSum'] 
q_objects = [Q(fieldname +'__contains', myString) for fieldname in columns] 
objects = objects.filter(reduce(operator.or_, q_objects)) 

我得到 異常類型:ValueError異常 異常值:值過多對「過濾器」最後一行解壓。任何想法

+0

你可以發佈堆棧跟蹤嗎?我認爲你的問題很可能出現在上面的那句,'Q'對象實例化看起來不正確。它應該是'Q(** {fieldname +'__ contains':myString})' - 傳遞它兩個單獨的參數,因爲你正在做的事情是行不通的。 – solarissmoke

回答

0

試試這個:

Q(**{fieldname + '__contains': myString}) 

這相當於提供了一個關鍵字參數,像往常一樣,當實例化一個Q對象。例如:

Q(fieldname__contains=myString, another_fieldname__contains=myOtherstring) 

Q對象本質上需要成對的值才能工作。看看代碼,看起來你也可以使用長度爲2的元組,像這樣(我還沒有測試過):

Q(("fieldname__contains", myString), ("another_fieldname__contains", myOtherString)) 
0

你在查詢什麼模型?它看起來像你離開了。

最後一行,

objects = objects.filter(reduce(operator.or_, q_objects)) 

應該像

objects = MyModel.objects.filter(...) 
相關問題