2014-09-24 78 views
1

非文本的专栏中,我有一个SQLAlchemy的模型:搜索在烧瓶管理员

class Multicast(db.Model): 
    __tablename__ = "multicast" 
    id = Column(Integer, primary_key=True) 
    addr = Column(Inet) 
    name = Column(Unicode(65)) 

我需要通过“地址”字段搜索。 我不能这样做了这种方式:

class MulticastView(ModelView): 
    column_searchable_list = ('name', 'addr',) 
    column_filters = ('name',) 
    model = Multicast 

,因为我有一个例外:只能对文本列进行搜索。无法设置搜索“地址”。我如何进行这项搜索?

回答

1

我找到了一些解决方案。我在MulticastView中覆盖了get_list方法。我复制了ModelView的所有源代码,并在搜索条件代码中添加了一行:

filter_stmt.append(func.text(Multicast.addr).like(stmt)) 

它的工作原理!

0

另一个选择是修改allowed_search_types为MulticastView类:

class MulticastView(ModelView): 
    allowed_search_types = (
     mongoengine.StringField, 
     mongoengine.URLField, 
     mongoengine.EmailField, 
     mongoengine.Inet 
    ) 
    ...