如何在Flask-Admin中显示角色 - 用户关系?

如何在Flask-Admin中显示角色 - 用户关系?

问题描述:

所以我创建了多个角色和数据结构基本瓶,用户的应用程序是这样的:如何在Flask-Admin中显示角色 - 用户关系?

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    active = db.Column('is_active', db.Boolean(), nullable=False, server_default='0') 
    first_name = db.Column(db.String(50), nullable=False, default='') 
    last_name = db.Column(db.String(50), nullable=False, default='') 
    email = db.Column(db.String(255), nullable=False, unique=True) 
    confirmed_at = db.Column(db.DateTime()) 
    # Relationships 
    user_auth = db.relationship('UserAuth', uselist=False) 
    roles = db.relationship('Role', secondary='user_roles', 
      backref=db.backref('users', lazy='dynamic')) 

    def is_active(self): 
     return self.active 

class UserAuth(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE')) 

    # User authentication information 
    username = db.Column(db.String(50), nullable=False, unique=True) 
    password = db.Column(db.String(255), nullable=False, default='') 

    # Relationships 
    user = db.relationship('User', uselist=False) 

    def hash_password(self, password): 
     self.password_hash = pwd_context.encrypt(password) 

    def verify_password(self, password): 
     return pwd_context.verify(password, self.password_hash) 

class Role(db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    name = db.Column(db.String(50), unique=True) 

class UserRoles(db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE')) 
    role_id = db.Column(db.Integer(), db.ForeignKey('role.id', ondelete='CASCADE')) 

我试图说明它在烧瓶管理:

class AdminView(ModelView): 
    def is_accessible(self): 
     access = current_user.is_authenticated and current_user.has_role('admin') 
     return access 

admin = Admin(app, name='My Admin', template_mode='bootstrap3') 
admin.add_view(AdminView(User, db.session)) 
admin.add_view(AdminView(UserAuth, db.session)) 
admin.add_view(AdminView(Role, db.session)) 
admin.add_view(AdminView(UserRoles, db.session)) 

为什么会出现这种奇怪的方式: enter image description here enter image description here

以及如何查看和编辑用户时能够编辑用户角色?

+0

在我看来,你是返回的对象,而不是属性。 – mmenschig

您尚未为您的UserAuth类的实例定义合适的字符串表示形式。一个合适的例子是:

class UserAuth(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE')) 

    # User authentication information 
    username = db.Column(db.String(50), nullable=False, unique=True) 
    password = db.Column(db.String(255), nullable=False, default='') 

    # Relationships 
    user = db.relationship('User', uselist=False) 

    def hash_password(self, password): 
     self.password_hash = pwd_context.encrypt(password) 

    def verify_password(self, password): 
     return pwd_context.verify(password, self.password_hash) 

    def __str__(self): 
     return unicode(self).encode('utf-8') 

    def __unicode__(self): 
     return self.username 

这需要为您的所有模型完成。

+0

要将角色显示为字符串列表,将'column_auto_select_related = True'添加到'View'和'__str__'并将'__hash__'添加到'Role'类对我来说就足够了。 – DuckQueen