Текстовое поле только для чтения в 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>
Другие вопросы по тегам