【问题标题】:flask-admin and pymongo search烧瓶管理员和 pymongo 搜索
【发布时间】:2014-08-08 18:25:54
【问题描述】:

我有以下ModelView

from flask.ext.admin.contrib.pymongo import ModelView
from flask.ext import login
from wtforms import form

class ImageView(ModelView):

    column_labels = dict(
        recordId='Record Id',
        customerId='Customer Id',
        createdAt='Created At',
        updatedAt='Updated At',
        imagePath='Image Path',
        imageUrl='Image Url',
        imageType='Image Type',
        tag='Tag'
    )

    column_list = (
        '_id',
        'recordId',
        'customerId',
        'createdAt',
        'updatedAt',
        'imagePath',
        'imageUrl',
        'imageType',
        'tag'
    )

    column_sortable_list = (
        'customerId',
    )

    column_searchable_list = (
        'customerId',
    )

    form = ImageForm

    def is_accessible(self):
        return login.current_user.is_authenticated()

    def get_list(self, *args, **kwargs):
        count, data = super(ImageView, self).get_list(*args, **kwargs)
        return count, data

我希望我的客户 id 是可搜索的,但不幸的是,因为它是 mongodb 中的整数类型,搜索将无法正常工作。如何实现自定义搜索功能来搜索该整数?请注意,我的customerId 完全有可能有重复,因为我没有强制执行唯一性,这就是我对这个 mongodb 文档的意图。

【问题讨论】:

    标签: pymongo flask-admin


    【解决方案1】:

    解决了。我真正要做的就是使用custom_filters 并应用我的自定义过滤器,它将传入的过滤器值转换为整数。

    像这样:

    class CustomFilterEqual(filters.BasePyMongoFilter):
        """
        Custom filter which casts the filter value as an integer, if possible.
        Failing which it will just set the value to an empty string, returning no results.
        """
        def apply(self, query, value):
            try:
                value = int(value)
            except:
                value = ""
            query.append({self.column: value})
            print(query)
            return query
    
        def operation(self):
            from flask.ext.admin.babel import gettext
            return gettext('equals')
    

    在我上面的ImageView 类中,删除column_searchable_list 属性并添加column_filters 属性:

    column_filters = (
        CustomFilterEqual('customerId', 'Customer Id'),
    )
    

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2015-09-17
      • 1970-01-01
      相关资源
      最近更新 更多