[英]Can't figure out how to link multiple nesting many to many relationships
我正在設置用戶身份驗證模塊以指定三個角色:“r”、“w”、“x”,但是我不知道如何鏈接網站的所有子組件。 該網站有五個級別: 1- 多個組織 2- 每個組織有多個項目 3- 每個項目有多個模塊。 用戶權限應鏈接到組織項目的模塊。
這是使用flask sqlalchmey 和flask-migrate。 我已經通讀了flask 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
您對所有外鍵引用列都有 PrimaryKey 約束。 刪除這些約束,因為它們是不必要的,因為您已將每個表設置為具有自己的“id”字段作為主鍵。 基本上,在上面的代碼中,每個表都應該只有一個 PrimaryKey 列。
例如hospital_project_id = db.Column(db.Integer, db.ForeignKey('hospital_projects.id'), primary_key=True)
變成hospital_project_id = db.Column(db.Integer, db.ForeignKey('hospital_projects.id'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.