我使用Association Proxy来建立一个间接的多对多关系,其中Submission
可以有多个Role
,而Role
可以与多个{flask-sqlalchemy
。在
class Role(db.Model):
__tablename__ = 'role'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text)
def __init__(self, name):
self.name = name
class Submission(db.Model):
__tablename__ = 'submission'
id = db.Column(db.Integer, primary_key=True)
submission_to_role = relationship("SubmissionToRole", cascade="all, delete-orphan")
roles = association_proxy('submission_to_role', 'role')
class SubmissionToRole(db.Model):
__tablename__ = 'submission_to_role'
submission_id = db.Column(db.Integer, db.ForeignKey('submission.id', ondelete='CASCADE'), primary_key=True)
role_id = db.Column(db.Integer, db.ForeignKey('role.id', ondelete='CASCADE'), primary_key=True)
submission = relationship(Submission)
role = relationship(Role)
def __init__(self, role):
self.role = role
我需要这样的行为:
^{pr2}$但是,当我关联一个已经关联的Role
时,SQLAlchemy创建了一个重复的Association对象。在
我怎样才能达到我想要的行为?我为Submission
编写了一个函数来绕过它
def associate_role(self, role):
assoc_model = SubmissionToRole.query.filter(
SubmissionToRole.submission_id == self.id
).filter(
SubmissionToRole.role_id == role.id
).first()
if not assoc_model:
self.roles.append(role)
但是想要更干净、更容易重复使用的东西。我能用SQLAlchemy的原生元素吗?在
目前没有回答
相关问题 更多 >
编程相关推荐