2012-11-25 30 views
2

我有模式是這樣的:瓶管理員不顯示所有字段

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') 

但無論我做什麼,燒瓶管理員並沒有表現出密碼字段,當我編輯用戶信息。有什麼辦法嗎?即使只是編輯哈希碼。

UPDATEhttps://github.com/mrjoes/flask-admin/issues/78

回答

5

之所以沒有奏效 - 瓶,管理員無法弄清楚如何處理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應支持該屬性。

0

好多了:

from wtforms.fields import PasswordField 

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