У меня есть четыре таблицы / классы: Group
. Bank
, Question
и Survey
. В опросах много вопросов, вопросы принадлежат банку, который, в свою очередь, принадлежит группе. У меня есть группа и опрос (я использую метод экземпляра Survey
и проверяю все экземпляры Group
) и хочу знать, какие вопросы принадлежат обоим.
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
banks = db.relationship('Bank', backref='group')
class Bank(db.Model):
id = db.Column(db.Integer, primary_key=True)
group_id = db.Column(db.Integer, db.ForeignKey('group.id')
questions = db.relationship('Question', backref='bank', lazy='dynamic')
class Question(db.Model):
id = db.Column(db.Integer, primary_key=True)
survey_id = db.Column(db.Integer, db.ForeignKey('survey.id')
bank_id = db.Column(db.Integer, db.ForeignKey('bank.id')
class Survey(db.Model):
id = db.Column(db.Integer, primary_key=True)
questions = db.relationship('Question', backref='survey', lazy='dynamic')
Я думал о том, чтобы попробовать что-то вроде self.questions.filter(Question.bank.in_(group.banks))
(self
- экземпляр Survey
), но получил NotImplementedError
. Прямо сейчас я использую некрасивые вложенные циклы for
с условиями if
и пытаюсь их очистить, тем более что я ожидаю, что из-за увеличения числа опросов и вопросов возникнет проблема со скоростью.
for group in groups:
for bank in group.banks:
for question in bank.questions:
if question in self.questions:
# do stuff