Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask Admin:在应用过滤器的情况下路由到模型视图_Python_Flask_Flask Admin - Fatal编程技术网

Python Flask Admin:在应用过滤器的情况下路由到模型视图

Python Flask Admin:在应用过滤器的情况下路由到模型视图,python,flask,flask-admin,Python,Flask,Flask Admin,我在Flask Admin中有一个带有过滤器的模型(例如,基于其他模型的外键) 我想在管理员中生成从前端到该模型视图的链接,并应用过滤器值。我注意到它将?flt0_0=添加到url,因此整个地址看起来有点像: http:/…/admin/model\u view\u/?flt0\u 0= 生成这样的路由的最佳方法是什么?不幸的是,目前还没有用于此目的的公共API。下面是一个简短的代码段,您现在可以使用它生成fltX_Y查询字符串: class MyView(BaseModelView): ...

我在Flask Admin中有一个带有过滤器的模型(例如,基于其他模型的外键)

我想在管理员中生成从前端到该模型视图的链接,并应用过滤器值。我注意到它将
?flt0_0=
添加到
url
,因此整个地址看起来有点像:

http:/…/admin/model\u view\u/?flt0\u 0=


生成这样的路由的最佳方法是什么?

不幸的是,目前还没有用于此目的的公共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\u filter\u url=True
,以消除这些神奇的数字(尽管您也可以在任何特定视图上设置):

这会创建如下URL:
http://.../admin/model/?flt_name_equals=foo&flt_country_contains=bar
(*)

这样,就可以使用要筛选的属性的名称轻松构建URL。作为奖励,您不需要有可用的视图实例——如果您想链接到不同模型的视图,这一点很重要


*(当从UI中选择过滤器时,Flask Admin将在参数键中插入整数。我不确定为什么会这样做,但它们似乎不是简单过滤所必需的。)

Flask Admin默认为
flt0\u 0=
语法,如果您的应用程序需要支持多种语言。如果您不需要担心翻译,那么设置
named\u filter\u url=True
就是一个好办法

使用
named\u filter\u url=True
Flask Admin生成如下过滤器查询参数:

flt0_country_contains=<value>
收益率:

将排序键添加到
flt
参数,然后我可以强制以不同的顺序显示这些过滤器(
flt1
将出现在
flt2
之前):

收益率:

实际上,该排序键可以是任何单个字符,例如:

?fltB_balance_smaller_than=100&fltA_balance_greater_than=5
此行为最终在Flask Admin
BaseModelView中定义。\u获取\u列表\u筛选\u参数()
方法:

我不确定是否使用它,因为使用多个过滤器时会导致许多不可预测的行为
?flt_balance_smaller_than=100&flt_balance_greater_than=5
?flt2_balance_smaller_than=100&flt1_balance_greater_than=5
?fltB_balance_smaller_than=100&fltA_balance_greater_than=5