【发布时间】:2019-08-09 00:24:46
【问题描述】:
我正在设置一个用户身份验证模块来指定三个角色:'r'、'w'、'x',但是我不知道如何链接网站的所有子组件。该网站有五个层次: 1- 多个组织 2- 每个组织有多个项目 3- 每个项目有多个模块。用户权限应与组织项目的模块相关联。
这是使用烧瓶 sqlalchmey 和烧瓶迁移。我已经阅读了烧瓶 sqlalchemy 和 sqlalchemy.com 文档,发现关联表可能是解决问题的方法。但我被困在这里,
class Hospital(db.Model):
__tablename__ = 'hospitals'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(), unique=True)
class Project(db.Model):
__tablename__ = 'projects'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(), unique=True)
class Module(db.Model):
__tablename__ = 'modules'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(), unique=True)
class HospitalProject(db.Model):
__tablename__ = 'hospital_projects'
id = db.Column(db.Integer(), primary_key=True)
hospital_id = db.Column(db.Integer, db.ForeignKey('hospitals.id'), primary_key=True)
project_id = db.Column(db.Integer, db.ForeignKey('projects.id'), primary_key=True)
hospital = db.relationship('Hospital', backref='projects')
project = db.relationship('Project', backref='hospitals')
class HospitalProjectModules(db.Model):
__tablename__ = 'hospital_project_modules'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(), unique=True)
hospital_project_id = db.Column(db.Integer, db.ForeignKey('hospital_projects.id'), primary_key=True)
module_id = db.Column(db.Integer, db.ForeignKey('modules.id'), primary_key=True)
hospital_project = db.relationship('HospitalProject', backref='modules')
module = db.relationship('Module', backref='hospital_projects')
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(), unique=True)
class HospitalProjectModulesUserRoles(db.Model):
__tablename__ = 'hospital_project_modules_user_roles'
id = db.Column(db.Integer(), primary_key=True)
hospital_project_module_id = db.Column(db.Integer, db.ForeignKey('hospital_project_modules.id'), primary_key=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
hospital_project_module = db.relationship('HospitalProjectModules', backref='User_Roles')
user = db.relationship('User', backref='hospital_project_module_roles')
role = db.relationship('Role', backref='hospital_project_module_users')
我遇到了这个错误。我知道这是因为 hospital_projects 没有唯一标识符,但我不知道如何解决它。
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidForeignKey) 没有匹配给定键的唯一约束 引用表“hospital_projects”
[SQL:
CREATE TABLE hospital_project_modules (
id INTEGER NOT NULL,
name VARCHAR,
hospital_project_id INTEGER NOT NULL,
module_id INTEGER NOT NULL,
PRIMARY KEY (id, hospital_project_id, module_id),
FOREIGN KEY(hospital_project_id) REFERENCES hospital_projects (id),
FOREIGN KEY(module_id) REFERENCES modules (id),
UNIQUE (name)
app/models.py61:51
LFUTF-8Pythongit+
DAMPublishGitHubGit (8)2 updates
【问题讨论】:
标签: python flask flask-sqlalchemy