У меня есть две таблицы: «Корпорации» и «Пользователи», каждая из которых может просматривать несколько пользователей, и каждый пользователь может подавать заявки в несколько корпораций.
Мои модели определены как:
class Corporate(Dictifiable, db.Model):
__tablename__ = 'corporate'
id = Column(Integer, Sequence('corporate_id_seq'), primary_key=True)
name = Column(String(1024), nullable=False)
admins = db.relationship('User', secondary='corporate_admin')
tests = db.relationship('Test', secondary='corporate_test')
applicants = db.relationship('User', secondary='corporate_applicants')
class User(Dictifiable, db.Model, UserMixin):
__tablename__ = 'user'
applicant_for = db.relationship('Corporate',
secondary='corporate_applicants')
Моя таблица «многие ко многим» определяется как:
class CorporateApplicants(Dictifiable, db.Model):
__tablename__ = 'corporate_applicants'
user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
corporate_id = Column(Integer, ForeignKey('corporate.id'),
primary_key=True)
# i want to access this
type = Column(db.Enum(ApplicationStatusTypes), nullable=True)
Мои запросы обычно выполняются так:
Corporate.query
.join(Corporate.applicants)# SQLAlchemy magic will make it join through the many to many
.options(contains_eager(Corporate.applications))
.all()
Но таким образом я не могу получить доступ к полю типа (для каждого пользователя, корпоративной комбинации это будет либо "короткий список", "нанятый", "отклоненный".
Это невозможнозапустить цикл и затем извлекать каждое значение отдельно из-за большого числа кандидатов.
Как я могу получить доступ к этому дополнительному столбцу, в то же время запрашивая отношения многие ко многим.