【问题标题】:Additional action button doesn't work on flask-admin附加操作按钮在烧瓶管理员上不起作用
【发布时间】:2019-02-01 20:51:00
【问题描述】:

我正在尝试向烧瓶管理表单添加一项操作。

它必须增加评分 (+1),它适用于批量操作,但不适用于单一操作。请帮我找出错误,我花了很多时间试图让这个东西正常工作。

代码如下:

我在模板文件夹中制作了一个 html 模板 - custom_lists.html

{% extends 'admin/model/list.html' %}
{% block list_row_actions %}
    {{ super() }}
  <form class="icon" method="POST" action="/admin/user/action/">
    <input id="action" name="action" value="approve" type="hidden">
    <input name="rowid" value="{{ get_pk_value(row) }}" type="hidden">
    <button onclick="return confirm('Are you sure you want to approve selected items?');" title="Approve">
      <span class="fa fa-ok glyphicon glyphicon-ok"></span>
    </button>
  </form>
{% endblock %}

这成功了,列表上有一个图标,但是如果我点击它-它会说

找不到

在服务器上找不到请求的 URL。如果您输入了 URL 请手动检查您的拼写,然后重试。

添加到模板文件夹并添加到 AdidasView 类中:

list_template = 'custom_list.html'
@action('approve', 'Approve', 'Are you sure you want to approve selected items?')
def action_approve(self, ids):
    try:
        query = Adidas.query.filter(Adidas.id.in_(ids))

        count = 0
        for image in query.all():
            image.rating += 1
            count += 1
            db.session.commit()
        flash(ngettext('Item was successfully approved.',
                       '%s items were successfully approved.'%count,count))
    except Exception as ex:
        if not self.handle_view_exception(ex):
            raise

        flash(gettext('Failed to approve items. %(error)s', error=str(ex)), 'error')

【问题讨论】:

    标签: python flask jinja2 flask-sqlalchemy flask-admin


    【解决方案1】:

    我没有更改模板,但我通过设置 column_extra_row_actions 变量并定义 action_play 函数做了不同的操作

    column_extra_row_actions = [
            EndpointLinkRowAction('glyphicon glyphicon-play', 'event.action_play')
        ]
    
    @expose('/action/play', methods=('GET',))
    def action_play(self, *args, **kwargs):
        return self.handle_action()
    

    【讨论】:

    • 我只是在研究这个问题,但这个答案在我的代码中非常有效
    【解决方案2】:

    此解决方案似乎不适用于此示例,但我也遇到了这样的情况:当我通过按钮对一个项目使用操作时收到 404,而批处理操作按预期工作。

    查看批处理操作的 JS 后,我意识到单个操作和批处理操作的两个 HTML 表单实际上是相同的。唯一的区别是,当使用批处理操作时,表单中可能会有更多的输入字段。这意味着如果您在其中一个上得到 404,而在另一个上没有,则 必须 在您的 HTML 中存在错误。

    在我的情况下,我不知道 Flask-Admin 将 models_with_underscores_in_their_name 处理为 modelswithunderscoresintheir_name。因此,而不是

    <form class="icon" method="POST" action="/admin/mymodel/action/">
    

    我的错误代码是

    <form class="icon" method="POST" action="/admin/my_model/action/">
    

    注意操作字段的区别。

    通过此更改,我能够使用 Flask-Admin 文档中解释的 @action API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2021-01-02
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多