编辑视图中的只读表单字段 - Flask-Admin

问题描述 投票:10回答:3

我尝试将表单字段设置为readonly,仅用于Flask-Admin应用程序中的编辑视图。根据this问题的答案,我知道如果我有这个

class MyView(ModelView):
    form_widget_args = {
        'title': {
            'readonly': True
        }
    }

我可以将表单字段设置为readonly,但这适用于创建和编辑视图。如何仅将参数应用于编辑视图?

python flask flask-sqlalchemy flask-admin
3个回答
4
投票

纯python解决方案可以使用管理员提供的on_form_prefill回调函数,它只在编辑视图中运行。在这种情况下你不需要form_widget_args

您可以使用类似的东西动态编辑表单,使该字段只读:

class MyView(ModelView):
  def on_form_prefill(self, form, id):
    form.title.render_kw = {'readonly': True}

2
投票

我会为此做一些解决方法。创建一个custom edit template并将其添加到您的班级。您在github (standard edit template)上的flask存储库中找到的标准编辑模板

class MyView(ModelView):
    edit_template = 'my_custom_edit_template.html'

并在您的自定义编辑模板中创建一个禁用您的元素的JavaScript函数。因此,它仅在编辑视图中禁用,而不在创建视图中禁用。

{% block tail %}
    {{ super() }}
    {{ lib.form_js() }}
    <script>
    window.onload = function () {
        document.getElementById("myfield_id").disabled = true;
    }
    </script>
{% endblock %}

它可能不是最好的解决方案,但它对我有用。我认为也应该可以更改jinja2模板以直接禁用该字段。我试过:{{form.myfield_id(disabled = True)}}然后它渲染我的场两次......但我的第一种方法有效。


1
投票

另一种方法是使用form_edit_rulesform_create_rules。在创建视图中显示您只需要的字段,并添加要在编辑视图中显示的字段并将其设置为只读

form_create_rules = (
    'col1', 'col2', 'col3')
form_edit_rules = (
    'col1', 'col2', 'col3', 'col4)

form_widget_args = {
    'col4': {
        'disabled': True
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.