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

14 投票
5 回答
12711 浏览
提问于 2025-04-17 15:52

我怎么才能让一个ModelView上的字段变成只读的呢?

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')

5 个回答

8

我在尝试给文本框使用 disabled 时遇到了奇怪的错误,所以我改用了 readonly

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')
    form_widget_args = {
        'email':{
            'readonly':True
        }
    }
11

我没有足够的声望去评论@thkang的回答,但他的回答跟我找到的解决办法很接近。使用disabled属性会把这个字段从提交的数据中排除掉,而使用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)
20

如果你在讨论使用 Flask-Admin 和 SQLAlchemy 模型,并且你是通过继承 sqlamodel.ModelView 来声明一个视图的话,你只需要在你的类定义中添加以下内容:

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')
    form_widget_args = {
        'email':{
            'disabled':True
        }
    }

撰写回答