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

osj*_*ick 12 python flask flask-sqlalchemy flask-admin

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

class MyView(ModelView):
    form_widget_args = {
        'title': {
            'readonly': True
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

Lui*_*duz 7

一个纯python解决方案可以使用on_form_prefilladmin提供的回调函数,并且只能在edit视图中运行。form_widget_args在这种情况下,您将不需要。

您可能会有类似这样的内容来动态编辑表单,从而使该字段为只读:

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


xFL*_*xFL 3

我会为此做一些解决方法。创建自定义编辑模板并将其添加到您的课程中。您在 github 上的 Flask 存储库中找到的标准编辑模板(标准编辑模板)

class MyView(ModelView):
    edit_template = 'my_custom_edit_template.html'
Run Code Online (Sandbox Code Playgroud)

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

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

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