我有三种模型:角色,用户和帖子。角色->用户是一对多,而用户->发布是一对多。当我只有用户和帖子时,一切正常。但是,我的网站将需要不同程度的授权。
class Role(db.Model):
id = db.Column(db.Integer, primary_key=True)
users = db.relationship('User', backref='role', lazy=True)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
role_id = db.Column(db.Integer, db.ForeignKey('role.id'), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
这是我收到的错误消息:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError)
no such column: user.role_id
谢谢!
答案 0 :(得分:1)
您无需显式定义role_id
字段-Role
中定义的关系(以及您指定的backref
参数)已经在{{1 }}个对象。 (SQLAlchemy documentation around backrefs可能对您有所帮助。)
这样,如果您有一个实例化的User
对象User
,则应该能够通过u
获取有关用户角色的详细信息(这将为您提供一个{{1} }实例),角色ID为u.role
。
因此,您的完整模型定义集只需要看起来像这样:
Role
如果执行此操作,则对于u.role.id
对象class Role(db.Model):
id = db.Column(db.Integer, primary_key=True)
users = db.relationship('User', backref='role', lazy=True)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
posts = db.relationship('Post', backref='author', lazy=True)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
,您可以将帖子作者的角色ID作为Post
获得(例如)。