2016-03-17 24 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

謝謝,它的工作。 –