在烧瓶管理员搜索非文本列(Search on non-text column in flask-ad

2019-09-30 08:03发布

我有一个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

因为我有一个例外:只能搜索文本列。 无法设置搜索“地址”。 我怎样才能使这个搜索?

Answer 1:

我找到了一些解决方案。 我在MulticastView overrided get_list方法。 我复制的所有源代码从模型视图和加入搜索标准代码的行:

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

有用!



Answer 2:

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

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


文章来源: Search on non-text column in flask-admin