2016-03-17 27 views
1

我在flask admin中创建了一个自定义datetimefilter,它在界面中看起来不错(可以选择日期时间范围),但不能在功能上工作。我认为申请方法不起作用。我要使用这个过滤器的表格是CassandraDateBetweenFilter过滤器无法在烧瓶中工作admin

from flask_admin.contrib.sqla.filters import BaseSQLAFilter 
from flask_admin.model import filters 
class DateBetweenFilter(BaseSQLAFilter, filters.BaseDateBetweenFilter): 
    def __init__(self, column, name, options=None, data_type=None): 
     super(DateBetweenFilter, self).__init__(column, 
               name, 
               options, 
               data_type='daterangepicker') 

def apply(self, query, value, alias=None): 
    start, end = value 
    return query.filter(self.get_column(alias).between(start, end)) 

和使用过滤器

class SearchAdminView(BaseModelView): 
    column_filters = [ 
     DateBetweenFilter(
     Search.created_date, 'Created Date' 
    ) 
    ] 

我错过了什么相应的管理类?

+0

flask_admin.contrib.sqla.filters中有一个DateBetweenFilter类,为什么要创建自己的?请检查http://flask-admin.readthedocs.org/en/latest/_modules/flask_admin/contrib/sqla/filters/ – huangli

回答

1

您可能错过了为get_list()方法中的admin类中定义的过滤器添加调用apply()的代码。

尝试将下面的代码添加到get_list()方法中。

def get_list(self, page, sort_column, sort_desc, search, filters, 
      execute=True, page_size=None): 
    """ 
     Get list of objects 
    """ 
    query = self.get_query(page, page_size) 
    for flt, k, value in filters: 
     query = self._filters[flt].apply(query, value, page_size) 
+0

谢谢,它的工作。 –