3

私はこのようなモデルを持っています:

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

私はModelViewを持っています:

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

しかし、私が何をしても、ユーザー情報を編集しているときに、flask管理者はパスワードフィールドを表示しませんでした。方法はありますか?ハッシュコードを編集するだけでも。

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

4

2 に答える 2

5

それが機能しなかった理由-Fl​​ask-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によってサポートされる必要があります。

于 2012-11-25T14:18:40.700 に答える
0

ずっといい:

from wtforms.fields import PasswordField

class UserAdmin(sqlamodel.ModelView):
    searchable_columns = ('username', 'email')
    excluded_list_columns = ['password']
    form_overrides = dict(password=PasswordField)
于 2013-01-11T09:30:29.533 に答える