2014-09-24 92 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 
    ) 
    ...