Мои фильтры поступают через get params следующим образом: filterName = 'email', filterValue = 'john @', и мне нужно построить мой запрос на основе них.
Если я пытаюсь использовать rows.filter( getattr( self.model, filterName ).like( filterValue + '%' ) )
, я получаю сообщение об ошибке: AttributeError: 'NoneType' object has no attribute 'like'
Поскольку параметры моей модели и фильтра приходят через GET, важно, чтобы я реализовал исправление для этого. Как бы вы предложили?
Вы не показываете, что такое self/self.model. Обычно это будет имя класса.
Итак, если у вас есть модель User
field = 'id'
field_val = 3
qry = Session.query(User).filter(getattr(User, field) == field_val)
должен отлично работать.
Вы не используете getattr из экземпляра (self), но из самого класса.
getattr(User, field).like()
. тогда вы получите AttributeError: 'NoneType' object has no attribute 'like'
rows.filter( User.email.like( filterValue + '%' ) )
он работает, даже если в то время значение User.email имеет значение None, ноrows.filter( getattr( self.model, filterName ).like( filterValue + '%' ) )
не удается