【问题标题】:Flask Admin doesn't show all fieldsFlask Admin 不显示所有字段
【发布时间】:2012-11-25 03:55:24
【问题描述】:

我有这样的模型:

class User(db.Model):
    __tablename__ = 'users'
    __table_args__ = {'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8'}
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    _password = db.Column('password', db.String(80))

    def __init__(self, username = None, email = None, password = None):
        self.username = username
        self.email = email
        self._set_password(password)

    def _set_password(self, password):
        self._password = generate_password_hash(password)

    def _get_password(self):
        return self._password

    def check_password(self, password):
        return check_password_hash(self._password, password)

    password = db.synonym("_password", descriptor=property(_get_password, _set_password))

    def __repr__(self):
        return '<User %r>' % self.username

我有模型视图:

class UserAdmin(sqlamodel.ModelView):
    searchable_columns = ('username', 'email')
    excluded_list_columns = ['password']
    list_columns = ('username', 'email')
    form_columns = ('username', 'email', 'password')

但无论我做什么,当我编辑用户信息时,flask 管理员都没有显示 password 字段。有什么办法吗?甚至只是为了编辑哈希码。

更新https://github.com/mrjoes/flask-admin/issues/78

【问题讨论】:

    标签: flask-admin flask-extensions


    【解决方案1】:

    不起作用的原因 - Flask-Admin 无法弄清楚如何处理 SynonymProperty,因此无法生成表单字段。

    有一种方法可以让它立即工作:

    class UserAdmin(sqlamodel.ModelView):
        searchable_columns = ('username', 'email')
        excluded_list_columns = ['password']
        list_columns = ('username', 'email')
        form_columns = ('username', 'email')
    
        def scaffold_form(self):
            form_class = super(UserAdmin, self).scaffold_form()
            form_class.password = wtf.TextField('Password')
            return form_class
    

    我推出了简单的修复程序,增加了对 SynonymProperty 的支持,因此即使没有自定义表单也可以工作。不幸的是,我正在添加 MongoDB 后端,所以我不能很快发布新版本。

    以防万一,SynonymProperty 在 SQLAlchemy 0.7 及更高版本中被混合属性取代,Flask-Admin 应该支持。

    【讨论】:

      【解决方案2】:

      好多了:

      from wtforms.fields import PasswordField
      
      class UserAdmin(sqlamodel.ModelView):
          searchable_columns = ('username', 'email')
          excluded_list_columns = ['password']
          form_overrides = dict(password=PasswordField)
      

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 2022-01-01
        • 2014-02-20
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多