2016-03-06 38 views
3

我在Flask-Admin中使用過濾器(例如,基於外鍵到其他模型)創建模型。Flask-Admin:路由到應用過濾器的模型視圖

我想在應用過濾器值的admin中生成從前端到此模型視圖的鏈接。我注意到,它增加了?flt0_0=url,使整個地址看起來有點:

http:/.../admin/model_view_<my model>/?flt0_0=<filter value>

這是產生這樣的路線的最好方法?

回答

2

不幸的是,目前還沒有公共API。這裏是您可以使用立即生成fltX_Y查詢字符串中的一小段:

class MyView(BaseModelView): 
... 
    def get_filter_arg(self, filter_name, filter_op='equals'): 
     filters = self._filter_groups[filter_name].filters 
     position = self._filter_groups.keys().index(filter_name) 

     for f in filters: 
      if f['operation'] == filter_op: 
       return 'flt%d_%d' % (position, f['index']) 

然後你就可以調用此方法在您的視圖實例:

print my_view.get_filter_arg('Name', 'contains') 
0

我喜歡我的基本視圖設置named_filter_urls=True到擺脫這些幻數的(雖然你可以把它放在任何特定視圖以及):

class MyBaseView(BaseModelView): 
    ... 
    named_filter_urls = True 


class MyView(MyBaseView): 
    ... 
    column_filters = ['name', 'country'] 

這將創建網址,如:http://.../admin/model/?flt_name_equals=foo&flt_country_contains=bar(*)

使用此功能,可以使用要過濾的屬性名稱輕鬆構建您的URL。作爲獎勵,你不需要有一個視圖實例可用 - 如果你想鏈接到不同模型的視圖很重要。

*(當從UI選擇過濾器,瓶,管理員將插入到整數參數鑰匙。我不知道爲什麼這樣做,但他們不爲簡單的過濾顯得必要。)