Campo de texto de solo lectura en Flask-Admin ModelView

¿Cómo puedo hacer un campo en un ModelView solo lectura?

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

Si está hablando de Flask-Admin con modelos SQLAlchemy, y está declarando una vista heredando de sqlamodel.ModelView, puede agregar esto a su definición de clase:

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

No tengo suficiente reputación para comentar sobre la respuesta de @thkang, que es muy cercana a lo que funcionó para mí. El atributo disabled excluye el campo de los datos POST, pero el uso de readonly tuvo el efecto deseado.

 from wtforms.fields import TextField class ReadonlyTextField(TextField): def __call__(self, *args, **kwargs): kwargs.setdefault('readonly', True) return super(ReadonlyTextField, self).__call__(*args, **kwargs) 

prueba esto:

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

Cuando esté representando el campo en su plantilla de Jinja, simplemente pase disabled=true si WTForms no reconoce el kwarg, simplemente lo pasa como un atributo al elemento html.

 
{{ form.example(disabled=True) }}

Obtuve errores extraños cuando intenté usar disabled para los campos de texto, así que usé readonly lugar:

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