Python Flask SQLAlchemy设置关系默认值
我有一个由Flask制作的应用程序,对于数据库管理,我使用Flask admin和Flask SQLAlchemy。 在我的应用程序中有三个角色,即:Python Flask SQLAlchemy设置关系默认值,python,flask,flask-sqlalchemy,flask-login,flask-admin,Python,Flask,Flask Sqlalchemy,Flask Login,Flask Admin,我有一个由Flask制作的应用程序,对于数据库管理,我使用Flask admin和Flask SQLAlchemy。 在我的应用程序中有三个角色,即: 管理 学校 家长 下面是我桌上的代码片段: roles_users = db.Table( 'roles_users', db.Column('user_id', db.Integer(), db.ForeignKey('user.id')), db.Column('role_id', db.Integer(), db.F
roles_users = db.Table(
'roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
class School(User):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class Parent(User):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
school_id = db.Column(db.Integer, db.ForeignKey('school.id'))
代码已经可以正常工作了
- 管理员可以创建学校帐户,并将用户角色设置为学校
- 拥有学校角色的用户可以创建家长帐户
class ParentModelView(sqla.ModelView):
def on_model_change(self, form, model, is_created):
if is_created:
model.school_id = current_user.id
model.roles = 'parent'
然后我得到了这个错误:
TypeError: Incompatible collection type: str is not list-like
TypeError: relationship() got an unexpected keyword argument 'default'
然后我试着用列表来包装它:
def on_model_change(self, form, model, is_created):
if is_created:
model.school_id = current_user.id
model.roles = ['parent']
那么错误可能是这样的:
AttributeError: 'str' object has no attribute '_sa_instance_state'
当我尝试在“关系”列上设置默认值时:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'),
default='parent') # or default=3 (which is '3' is the parent id in roles_user association table.
然后我得到了这个错误:
TypeError: Incompatible collection type: str is not list-like
TypeError: relationship() got an unexpected keyword argument 'default'
因此,我想要的是在定义用户角色的关系列上设置一个默认值
任何帮助都将不胜感激。在您的代码中,当您应该分配
角色
实例列表时,您正试图分配字符串“parent”
在您的on\u model\u change
方法中,您需要从数据库中获取名为“Parent”的角色,然后将其作为列表分配给角色关系
示例(未测试)
谢谢,你真的又节省了我的时间:)