当前位置: 首页 > article >正文

flask-admin的modelview 实现list列表视图中扩展修改状态按钮

背景:

在flask-admin的模型视图(modelview 及其子类)中如果不想重构UI视图,那么就不可避免的出现默认视图无法很好满足需求的情况,如默认视图中只有“新增”,“编辑”,“选中的”三个按钮。

材料:

完整的flask-admin 开发环境

制作:

视图源码

1、在ModelView 子视图中直接添加column_extra_row_actions 的扩展实现


    column_extra_row_actions = [
        LinkRowAction('glyphicon glyphicon-off', '/admin/aiconfig/changestatus/{row_id}'),
        EndpointLinkRowAction('glyphicon glyphicon-test', 'aiconfig.index_view')
    ]

2、按钮图标直接去bootstrop 中复制替换即可使用(组件 · Bootstrap v3 中文文档 | Bootstrap 中文网) 

 

3、 /admin/aiconfig/changestatus/{row_id} 对应的业务实现代码

    @expose('/changestatus/<string:ai_id>', methods=('GET', 'POST'))
    def updateStatus(self, ai_id):
        if ai_id:
            return_url = request.values.get('url') or self.get_url('.index_view')
            model = self.get_one(ai_id)
            if model is None:
                flash(gettext('Record does not exist.'), 'error')
                return redirect(return_url)
        form = self.edit_form(obj=model)
        model.updated_at = datetime.today()
        model.status = 1 if model.status == 0 else 0
        if self.update_model(form, model):
            flash(gettext('Record was successfully saved.'), 'success')
            # save button
            return redirect(self.get_save_return_url(model, is_created=False))  
        else:
            return redirect(return_url)

注:直接写到当前视图即可

效果 

经验与注意点 

1、column_extra_row_actions 扩展类的EndpointLinkRowAction 实现中必填项第一个为图标,第二个为视图权限,如下:

EndpointLinkRowAction('glyphicon glyphicon-test', 'aiconfig.index_view')

注:上面代码片段中“aiconfig.index_view”中的aiconfig 为当前视图注册名,如果注册时没有定义,flask-admin 默认为modelview 的集成子类对应的模型名

  admin.add_view(MyAiConfigView(db.session, name='Dify配置', category='Dify管理'))

由于本例子中注册时没有特别声明Endpoint ,所以就会取 aiconfig,为该视图对应的实体名,通过视图中定义的下面代码片段可以看到

    def __init__(self, session, **kwargs):
        # You can pass name and other parameters if you want to
        super(MyAiConfigView, self).__init__(AiConfig, session, **kwargs)

2、第一点中提到的 aiconfig.index_view 其实可以省略为".index_view",如下代码片段,照样有效

  column_extra_row_actions = [
        LinkRowAction('glyphicon glyphicon-off', '/admin/aiconfig/changestatus/{row_id}'),
        EndpointLinkRowAction('glyphicon glyphicon-test', '.index_view')
    ]

3、column_extra_row_actions 可以通过LinkRowAction 及其子类实现新扩展按钮的url连接。


http://www.kler.cn/a/446441.html

相关文章:

  • VMware安装Ubuntu 16.04以及安装好后初步使用配置!
  • 堆【Lecode_HOT100】
  • 点击展示大图预览
  • 使用 datamodel-code-generator 从 MySQL 生成 Python 模型
  • docker springboot 运维部署详细实例
  • [python SQLAlchemy数据库操作入门]-02.交易数据实体类建立
  • 【Prompt Engineering】6 文本扩展
  • ML 系列:第 40 节 — 最大似然MLE 的简单问题
  • 【WRF教程第3.1期】预处理系统 WPS 详解:以4.5版本为例
  • 利用Java获取淘宝商品详情API接口的深入指南引言
  • iOS 应用的生命周期
  • 【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》
  • Apache Solr RCE(CVE-2017-12629)--vulhub
  • electron-vite打包后图标不生效问题
  • 前端实习近期小结
  • ML307R 串口开发--OpenCPU应用程序开发学习笔记(2)
  • 通过edu 邮箱免费使用 Autodesk
  • QT:Widgets中的模型/视图架构
  • 【AI驱动的设计模式:类图的智能化解读】
  • [机器学习] 决策树
  • 关于VS项目中添加第三方库出现error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 错误的解决方法
  • 【Visual Studio Code(VSCode)介绍】
  • 城市灾害应急管理集成系统——系统介绍
  • Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
  • [react] <NavLink>自带激活属性
  • 项目29:简易谜语生成器 --- 《跟着小王学Python·新手》