2012-11-25 3 views
2

내가 가진 모든 필드를 표시하지 않습니다 같은 모델 :플라스크 관리자는

에 상관없이 내가 무엇을
class UserAdmin(sqlamodel.ModelView): 
    searchable_columns = ('username', 'email') 
    excluded_list_columns = ['password'] 
    list_columns = ('username', 'email') 
    form_columns = ('username', 'email', 'password') 

그러나, 플라스크 관리자가 비밀번호를 보이지 않았다 :

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 

나는 모델 뷰가 필드에서 사용자 정보를 편집하고 있습니다. 어떤 방법이 있습니까? 심지어 해시 코드를 편집 할 수도 있습니다.

UPDATE : 작동하지 않은 이유 https://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는 Flask-Admin에서 지원해야하는 SQLAlchemy 0.7 이상의 하이브리드 속성으로 대체되었습니다.

0

훨씬 나아 :

from wtforms.fields import PasswordField 

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