Текстовое поле только для чтения в Flask-Admin ModelView
Как я могу сделать поле на ModelView
только для чтения?
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
5 ответов
Решение
Если вы говорите о Flask-Admin с моделями SQLAlchemy и объявляете представление путем наследования от sqlamodel.ModelView, вы можете просто добавить это в определение класса:
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
form_widget_args = {
'email':{
'disabled':True
}
}
У меня недостаточно репутации, чтобы комментировать ответ @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, просто передайте disabled=true
если WTForms не распознает kwarg, он просто передает его в качестве атрибута в элемент html.
<form>
{{ form.example(disabled=True) }}
</form>