我试图仅将Flask-Admin应用程序中的 edit 视图的表单字段设置为readonly
。在回答this问题之后,我知道如果我有这个问题
class MyView(ModelView):
form_widget_args = {
'title': {
'readonly': True
}
}
我可以将表单字段设置为readonly
,但这同时应用于 create 和 edit 视图。如何仅将参数应用于 edit 视图?
答案 0 :(得分:4)
一个纯python解决方案可能使用了admin提供的on_form_prefill
回调函数,并且仅在编辑视图中运行。在这种情况下,您不需要form_widget_args
。
您可能会有这样的内容来动态编辑表单,从而使该字段为只读:
class MyView(ModelView):
def on_form_prefill(self, form, id):
form.title.render_kw = {'readonly': True}
答案 1 :(得分: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)}},但是它两次渲染了我的字段……但是我的第一种方法有效。
答案 2 :(得分:1)
另一种实现方法是使用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
}
}
答案 3 :(得分:0)
我认为您可以通过在处理edit的方法中检查要编辑的值来做到这一点。 例如: 您正在尝试编辑ID为1的值,然后在views py文件中可以检查该值并添加代码。
def editdata(id=None):
if id:
form.title.render_kw = {'readonly': True}
#rest of the code