【问题标题】:Readonly text field in Flask-Admin ModelViewFlask-Admin ModelView 中的只读文本字段
【发布时间】:2013-02-14 12:25:57
【问题描述】:

如何在ModelView 上设置一个只读字段?

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

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-admin


    【解决方案1】:

    如果您正在谈论带有 SQLAlchemy 模型的 Flask-Admin,并且您通过从 sqlamodel.ModelView 继承来声明视图,则只需将其添加到您的类定义中:

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

    【讨论】:

    • 这可能不是你想要的。我实现了这一点,但注意到被禁用的字段在提交时被清除。当我改用 readonly 时,我得到了预期的行为(值没有改变)。
    【解决方案2】:

    我没有足够的声誉来评论@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)
    

    【讨论】:

    • 有什么方法可以设置它吗? form_widget_args = { 'type_values': { 'readonly': 'readonly' } }
    • Lawrence,我会将 form_extra_fields 指定为与​​您希望只读的字段相同的名称,它将覆盖此字段。
    • 即form_overrides = dict(your_field_name=ReadonlyTextField) 或者可能是 form_extra_fields = dict(your_field_name=ReadonlyTextField('Label',...))
    【解决方案3】:

    当我尝试将disabled 用于文本字段时出现奇怪的错误,因此我改用了readonly

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

      【讨论】:

        【解决方案5】:

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

        <form>
        {{ form.example(disabled=True) }}
        </form>
        

        【讨论】:

          猜你喜欢
          • 2022-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-06
          • 1970-01-01
          • 2014-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多