从flask管理UI编辑数据

从flask管理UI编辑数据,flask,web,sqlalchemy,flask-admin,flask-user,Flask,Web,Sqlalchemy,Flask Admin,Flask User,我实际上在做一个项目(Python=3.8+Flask=1.1.1+Flask user=1.0.2.2+Flask admin+Sqlalchemy=2.4.0) 在这个项目中,我有两个模型用户和角色。 每个用户必须有一个角色(用户和角色之间为一对多) 我的模型: class User(db.Model, UserMixin): __tablename__ = 'USER' id = db.Column(Integer, primary_key=True) userna

我实际上在做一个项目(Python=3.8+Flask=1.1.1+Flask user=1.0.2.2+Flask admin+Sqlalchemy=2.4.0)

在这个项目中,我有两个模型用户和角色。 每个用户必须有一个角色(用户和角色之间为一对多)

我的模型:

class User(db.Model, UserMixin):
    __tablename__ = 'USER'
    id = db.Column(Integer, primary_key=True)
    username = db.Column(db.String(50), nullable=False, unique=True)
    password = db.Column(db.String(255), nullable=False)
    roles = db.Column(db.String(50), ForeignKey("ROLE.name"))

class Role(db.Model, TimestampMixin):
    __tablename__ = 'ROLE'
    id = db.Column(db.Integer(), primary_key=True)
    user = db.relationship("User")
    name = db.Column(db.String(50), unique=True, nullable=False)
变量角色是我的角色,但我认为用户基于多个角色,所以我让角色

我已经用flask admin创建了一些admin_视图,如下所示:

class BaseCustomModelView(ModelView):
    def __init__(self, *args, **kwargs):
        self.roles_accepted = kwargs.pop('roles_accepted', list())
        super(BaseCustomModelView, self).__init__(*args, **kwargs)

    def is_accessible(self):
        if not current_user.is_active or not current_user.is_authenticated:
            return False
        else :
            roles_accepted = getattr(self, 'roles_accepted', None)
            return any([current_user.has_roles(role) for role in roles_accepted])

class UtilisateurAdmin(BaseCustomModelView):
    can_create = True
    can_view_details = True
    can_edit = True
    can_delete = True
    column_list = ('username', 'password', 'roles')
    column_details_list = column_list
    column_searchable_list = column_list
    column_filters = column_list

    # Disallow to see
    column_exclude_list = ('password')
    form_excluded_columns =  ('password')
    column_details_exclude_list = ('password')
    column_export_exclude_list = ('password')
    
    form_widget_args = { 
        'password' : {"disabled" : True}
    }

admin.add_view(UtilisateurAdmin(model=User, session=db.session, category='Objects', roles_accepted=["admin_role", "user_role"]))
我创建了两个角色:“管理员角色”和“用户角色”。 问题是当我访问UI以修改用户角色时。 除角色外,所有数据均显示并可编辑

我认为这是因为“用户”模型中的变量“角色”与“角色”模型是一种关系

我想要的是在我更改角色时能够选择admin_角色或user_角色

要启动此代码:

app = Flask(__name__, instance_relative_config=False)
db.init_app(app)
from  . import models
user_manager = UserManager(app, db, User)
from  . import db
db.create_all()
admin = Admin(app,
                  name='Testr',
                  base_template='my_master.html',
                  template_mode='bootstrap2',
                  url='/')
app.run()