2011-06-10 92 views
1

我的過濾器通過像這樣得到參數​​:filterName ='email',filterValue ='john @',我需要基於它們構建查詢。sqlalchemy獲取模型屬性問題

如果我嘗試使用rows.filter(getattr(self.model, filterName).like(filterValue + '%'))我得到一個錯誤:AttributeError: 'NoneType' object has no attribute 'like'

由於我的兩個模型和過濾PARAMS來通過GET我實行定爲這是至關重要的。你會怎麼建議?

+1

只要您以前沒有將屬性「email」分配給模型類(值爲None),它看起來應該可以工作。有沒有其他地方可能發生? – Keith 2011-06-10 11:52:33

+0

如果我使用'rows.filter(User.email.like(filterValue +'%'))'即使User.email在那時的值爲None,它也可以工作,但'rows.filter(getattr(self.model, filterName)。(filterValue +'%'))'失敗 – 2011-06-10 13:20:04

+0

'type(self.model)'的輸出是什麼? – Keith 2011-06-10 13:38:17

回答

0

你不顯示self/self.model在那裏。通常它會是一個類名。

所以,如果你有一個模型,用戶

field = 'id' 
field_val = 3 
qry = Session.query(User).filter(getattr(User, field) == field_val) 

應該迎刃而解。

你不是從實例(self)中使用getattr,而是從類本身使用getattr。

+0

工作。那麼應該在getattr(User,field).like()'上附加like()方法。那麼你會得到'AttributeError:'NoneType'對象沒有'like'這樣的屬性 – 2011-06-10 11:51:28