Flask-Admin ModelView中的只读文本字段

use*_*987 11 python flask flask-sqlalchemy flask-admin

如何在ModelViewreadonly 上创建一个字段?

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')
Run Code Online (Sandbox Code Playgroud)

小智 13

如果您正在使用SQLAlchemy模型讨论Flask-Admin,并且您通过继承sqlamodel.ModelView来声明视图,则可以将其添加到类定义中:

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')
    form_widget_args = {
        'email':{
            'disabled':True
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 这可能不是你想要的.我实现了这一点,但注意到被禁用的字段在提交时被**清除**.当我使用`readonly`代替时,我得到了预期的行为(值不会改变). (13认同)

小智 10

我没有足够的声誉评论@ 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)
Run Code Online (Sandbox Code Playgroud)


thk*_*ang 7

试试这个:

class DisabledTextField(TextField):
  def __call__(self, *args, **kwargs):
    kwargs.setdefault('disabled', True)
    return super(DisabledTextField, self).__call__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)


MF *_*OOM 7

尝试disabled用于文本字段时出现奇怪的错误,所以我readonly改用了:

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')
    form_widget_args = {
        'email':{
            'readonly':True
        }
    }
Run Code Online (Sandbox Code Playgroud)


Doo*_*beh 6

当您在Jinja模板中渲染字段时,disabled=true如果WTForms无法识别kwarg,只需传入它,它只是将它传递给html元素的属性.

<form>
{{ form.example(disabled=True) }}
</form>
Run Code Online (Sandbox Code Playgroud)