【问题标题】:Set fields read-only according to type of user, using form_widget_args, Flask, SQLAlchemy根据用户类型将字段设置为只读,使用 form_widget_args、Flask、SQLAlchemy
【发布时间】:2021-04-12 21:11:53
【问题描述】:

我有两种类型的用户定义了不同的角色。在我的模型示例中,我希望字段 A 对于用户类型 'staff' 是只读的,但对于用户类型 'boss' 是可编辑的。目前我只能将所有用户的字段设置为只读。如何处理这种多用户类型的情况?

class Example(Base_Model)
   __tablename__ = 'example'
   A = Column(Text(), nullable=False)

class View(Base_View)
    "form_widget_args": {
        "A": {"readonly": True}
    }

admin.add_view(View(Example, db.session))

## to check if the user is staff
# login.current_user.has_auth('staff')

【问题讨论】:

    标签: flask sqlalchemy flask-sqlalchemy flask-wtforms flask-admin


    【解决方案1】:

    使用 Flask Admin 已经有一段时间了,但这会起作用吗?

    if "staff" in current_user.roles:
        "form_widget_args": {"A": {"readonly": True}
    else:
        "form_widget_args": {"A": {"readonly": False}
    

    【讨论】:

      【解决方案2】:

      覆盖方法edit_formdocs),实例化默认编辑表单,测试用户是谁,然后根据需要修改表单。

      例如:

      class ExampleView(AdminView):
      
          def edit_form(obj=None):
              form = super(ExampleView, self).edit_form(obj=obj)
              if current_user.has_auth('staff'):
                  # untested
                  form.A.render_kw['readonly'] = True
              return form
      

      【讨论】:

      • 谢谢!我想知道这是否也适用于内联模型?就像我的示例模型有一个父模型一样,这会覆盖父模型的方法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多