我在Flask-Admin中使用過濾器(例如,基於外鍵到其他模型)創建模型。Flask-Admin:路由到應用過濾器的模型視圖
我想在應用過濾器值的admin中生成從前端到此模型視圖的鏈接。我注意到,它增加了?flt0_0=
到url
,使整個地址看起來有點:
http:/.../admin/model_view_<my model>/?flt0_0=<filter value>
這是產生這樣的路線的最好方法?
我在Flask-Admin中使用過濾器(例如,基於外鍵到其他模型)創建模型。Flask-Admin:路由到應用過濾器的模型視圖
我想在應用過濾器值的admin中生成從前端到此模型視圖的鏈接。我注意到,它增加了?flt0_0=
到url
,使整個地址看起來有點:
http:/.../admin/model_view_<my model>/?flt0_0=<filter value>
這是產生這樣的路線的最好方法?
不幸的是,目前還沒有公共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')
我喜歡我的基本視圖設置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選擇過濾器,瓶,管理員將插入到整數參數鑰匙。我不知道爲什麼這樣做,但他們不爲簡單的過濾顯得必要。)