烧瓶 sqlalchemy 中 3 个表之间的关系

问题描述 投票:0回答:0

我正在为我的孩子们开发一个工具。该工具包含许多应用程序(绘图、图书馆、测验......)。每个用户都可以拥有多个具有不同权限的应用程序。登录后,每个用户都应该获得可用应用程序的个人概览 (

permission == view
)。我还需要知道用户是否有其他权限 (
add/update/delete
) 来放置管理功能的按钮。我很难创建模型和关系。

我的目标是:

user = User.query.filter_by(user_id = current_user.id).first()
#user should have the structure: [{'app1':{prop1:'', prop2:'', permissions:['view', 'add']},...]
#where prop-n are placeholder 
#render_template('overview.html', user)

在观看了许多视频并阅读了文档后,我能够连接应用程序和用户

from app import db, login_manager
from flask_login import UserMixin
from sqlalchemy.ext.associationproxy import association_proxy

class User(db.Model, UserMixin):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key = True)
    username = db.Column(db.String(20), unique = True, nullable = False)
    app_association = db.relationship('App2User', back_populates = 'user')
    apps = association_proxy("app_association","apps")

class App(db.Model):
    __tablename__ = 'apps'
    id = db.Column(db.Integer, primary_key = True)
    user = db.relationship('App2User', back_populates = 'apps')

class App2User(db.Model):
    __tablename__ = 'apps_2_user'
    id = db.Column(db.Integer, primary_key = True)
    app_id = db.Column(db.Integer, db.ForeignKey('apps.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', back_populates = 'app_association')
    apps = db.relationship('App', back_populates = 'user')
    db.UniqueConstraint(app_id, user_id)

现在我创建了两个新类

class Permission(db.Model):
    __tablename__ = 'apps_permissions'
    id = db.Column(db.Integer, primary_key = True)
    name= db.Column(db.String(100), nullable = False, unique = True)

class Permission2App2User(db.Model):
    __tablename__ = 'rechte_2_apps_2_user'
    id = db.Column(db.Integer, primary_key = True)
    permission_id = db.Column(db.Integer, db.ForeignKey('apps_rechte.id'))
    app2user_id = db.Column(db.Integer, db.ForeignKey('apps_2_user.id'))

因为每个

App2User
可以有多个权限,每个权限可以有多个
App2User
我又一次有一个多对多的关系,我试过类似地解决这个问题。

有人可以帮忙吗?

flask many-to-many flask-sqlalchemy relationship
© www.soinside.com 2019 - 2024. All rights reserved.