从flask管理UI编辑数据
我实际上在做一个项目(Python=3.8+Flask=1.1.1+Flask user=1.0.2.2+Flask admin+Sqlalchemy=2.4.0) 在这个项目中,我有两个模型用户和角色。 每个用户必须有一个角色(用户和角色之间为一对多) 我的模型:从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
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()