Я использую колбу-sqlalchemy, чтобы реализовать отношения многие ко многим. Перепробовал много вариантов, но не смог запросить у всех потомков родителя.
class Participant(db.Model):
__tablename__='participant'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True)
name = db.Column(db.String(120), unique=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship("User")
@staticmethod
def get_by_user(user):
return Participant.query.filter_by(user=user).first()
def __repr__(self):
return "(Participant '{}')".format(self.email)
competitions = db.relationship("CompetitionParticipant", back_populates="participant")
class Competition(db.Model):
__tablename__='competition'
__table_args__={'extend_existing':True}
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(100),unique=True)
description=db.Column(db.String(255),unique=True)
# type=db.Column(db.String(50))#Team,Individual,Practice,etc.
start_date=db.Column(db.DateTime)
end_date=db.Column(db.DateTime)
result_date=db.Column(db.DateTime)
participants = db.relationship('CompetitionParticipant', back_populates='competition')
def __repr__(self):
return "(Competition '{}')".format(self.name)
class CompetitionParticipant(db.Model):
__tablename__='competition_participant'
__table_args__={'extend_existing':True}
id=db.Column(db.Integer,primary_key=True)
participant_id=db.Column(db.Integer, db.ForeignKey('participant.id'))
competition_id=db.Column(db.Integer, db.ForeignKey('competition.id'))
competition=db.relationship("Competition",back_populates="participants")
participant=db.relationship("Participant",back_populates="competitions")
def __repr__(self):
return "(competition_id, participant_id '{},{}')".format(self.competition_id,self.participant_id)
В этом примере взаимоотношений "многие ко многим", как я буду запрашивать все соревнования, в которых участвует участник?
Я пробовал следующее:
participant.competitions # returns relationship object
все остальное, что я пробовал, было синтаксической ошибкой. Как правильно ORM извлекать все соревнования, в которых участвует участник?