我尝试将表单字段设置为readonly
,仅用于Flask-Admin应用程序中的编辑视图。根据this问题的答案,我知道如果我有这个
class MyView(ModelView):
form_widget_args = {
'title': {
'readonly': True
}
}
我可以将表单字段设置为readonly
,但这适用于创建和编辑视图。如何仅将参数应用于编辑视图?
纯python解决方案可以使用管理员提供的on_form_prefill
回调函数,它只在编辑视图中运行。在这种情况下你不需要form_widget_args
。
您可以使用类似的东西动态编辑表单,使该字段只读:
class MyView(ModelView):
def on_form_prefill(self, form, id):
form.title.render_kw = {'readonly': True}
我会为此做一些解决方法。创建一个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)}}然后它渲染我的场两次......但我的第一种方法有效。
另一种方法是使用form_edit_rules和form_create_rules。在创建视图中显示您只需要的字段,并添加要在编辑视图中显示的字段并将其设置为只读
form_create_rules = (
'col1', 'col2', 'col3')
form_edit_rules = (
'col1', 'col2', 'col3', 'col4)
form_widget_args = {
'col4': {
'disabled': True
}
}