我正在尝试向flask-admin表单添加更多操作。
它必须增加等级(+1),并且可以批量操作,但不能单次操作。请帮助我找到该错误,我花了很多时间试图使它正常工作。
代码如下:
我在模板文件夹-custom_lists.html
中制作了一个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')
答案 0 :(得分:4)
我没有更改模板,但通过设置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()
答案 1 :(得分:0)
此解决方案似乎不适用于此示例,但我也遇到了以下情况:当我通过按钮对一个项目使用操作时收到 404,而批处理操作按预期工作。
查看批处理操作的 JS 后,我意识到用于单个操作和批处理操作的两个 HTML 表单实际上是相同的。唯一的区别是,当使用批处理操作时,表单中可能会有更多的输入字段。这意味着,如果您在一个上得到 404,而在另一个上没有得到 404,则您的 HTML 中必须有错误。
就我而言,我不知道 Flask-Admin 将 models_with_underscores_in_their_name 作为 modelswithunderscoresintheirname 处理。因此,而不是
<form class="icon" method="POST" action="/admin/mymodel/action/">
我的错误代码是
<form class="icon" method="POST" action="/admin/my_model/action/">
注意操作字段的不同。
通过此更改,我能够使用 Flask-Admin 文档中所述的 @action
API。