【发布时间】:2013-02-14 12:25:57
【问题描述】:
如何在ModelView 上设置一个只读字段?
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
【问题讨论】:
标签: python flask flask-sqlalchemy flask-admin
如何在ModelView 上设置一个只读字段?
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
【问题讨论】:
标签: python flask flask-sqlalchemy flask-admin
如果您正在谈论带有 SQLAlchemy 模型的 Flask-Admin,并且您通过从 sqlamodel.ModelView 继承来声明视图,则只需将其添加到您的类定义中:
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
form_widget_args = {
'email':{
'disabled':True
}
}
【讨论】:
readonly 时,我得到了预期的行为(值没有改变)。
我没有足够的声誉来评论@thkang 的答案,这与对我有用的答案非常接近。 disabled 属性从 POST 数据中排除了该字段,但使用 readonly 具有预期的效果。
from wtforms.fields import TextField
class ReadonlyTextField(TextField):
def __call__(self, *args, **kwargs):
kwargs.setdefault('readonly', True)
return super(ReadonlyTextField, self).__call__(*args, **kwargs)
【讨论】:
当我尝试将disabled 用于文本字段时出现奇怪的错误,因此我改用了readonly:
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
form_widget_args = {
'email':{
'readonly':True
}
}
【讨论】:
试试这个:
class DisabledTextField(TextField):
def __call__(self, *args, **kwargs):
kwargs.setdefault('disabled', True)
return super(DisabledTextField, self).__call__(*args, **kwargs)
【讨论】:
当您在 Jinja 模板中渲染字段时,如果 WTForms 无法识别 kwarg,只需传入 disabled=true,它只是将其作为属性传递给 html 元素。
<form>
{{ form.example(disabled=True) }}
</form>
【讨论】: