Flask-Admin column_formatters 未调用

Posted

技术标签:

【中文标题】Flask-Admin column_formatters 未调用【英文标题】:Flask-Admin column_formatters not called 【发布时间】:2022-01-20 07:33:41 【问题描述】:

我正在使用 Flask-Admin 并想在我的内联模型视图中添加一个额外的字段。 目的是显示文件系统中的图像。

问题是我的列格式化程序永远不会被调用并且图像永远不会被加载。任何建议将不胜感激。

class ImageView(ModelView):
    form_columns = ['id', 'mime_type', 'path']

    @staticmethod
    def _user_formatter(view, context, model, name):
        logging.warning("NOT CALLED")
        return Markup('<img src="%s">' % form.thumbgen_filename(1))

    column_formatters = dict(path=lambda v, c, m, p: ImageView._user_formatter(v, c, m, p))

    form_extra_fields = 
        'path': form.ImageUploadField('Image', base_path='/app/uploads', thumbnail_size=(400, 400, True))
    

class VehicleModelView(ModelView):
    inline_models = [ImageView(DbModel, db.session)]

【问题讨论】:

【参考方案1】:

尝试在不使用@staticmethod 的情况下调用它

flask-admin 就是这么称呼它的 column_formatters

class ImageView(ModelView):
    form_columns = ['id', 'mime_type', 'path']

    def _user_formatter(view, context, model, name):
        logging.warning("NOT CALLED")
        return Markup('<img src="%s">' % form.thumbgen_filename(1))

    column_formatters = dict(path=_user_formatter)

    form_extra_fields = 
        'path': form.ImageUploadField('Image', base_path='/app/uploads', thumbnail_size=(400, 400, True))
    

这是 Flask-Admin 给出的示例

class ImageView(sqla.ModelView):
    def _list_thumbnail(view, context, model, name):
        if not model.path:
            return ''

        return Markup('<img src="%s">' % url_for('static',
                                                 filename=form.thumbgen_filename(model.path)))

    column_formatters = 
        'path': _list_thumbnail
    

    # Alternative way to contribute field is to override it completely.
    # In this case, Flask-Admin won't attempt to merge various parameters for the field.
    form_extra_fields = 
        'path': form.ImageUploadField('Image',
                                      base_path=file_path,
                                      thumbnail_size=(100, 100, True))
    

【讨论】:

问题是我正在为编辑视图尝试这个。根据文档,此视图不调用 column_formatters。 :-( 您的视图被扩展到 ModelView,它也使用 BaseModelView 中的 edit_view。

以上是关于Flask-Admin column_formatters 未调用的主要内容,如果未能解决你的问题,请参考以下文章

flask-admin有用的例子

Flask-admin使用经验技巧总结

Flask-admin使用经验技巧总结

flask项目结构快速开发后台flask-admin

Flask-Admin使用教程

在 Flask-Admin 中替换 Jquery Select2?