连接各表的多个外键路径

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

我在做一个MCQ问题答案db模式。但是这个给我一个错误。我对这个问题很揪心。

"无法确定关系Question.options上的父子表之间的连接条件--有多个外键路径连接着这些表。 指定'foreign_keys'参数,提供那些应该被算作包含父表外键引用的列的列表。"

class Question(db.Model):
    tablename = 'question'
    id = db.Column(db.Integer, primary_key=True)
    question_text = db.Column(db.Text)
    correct_option_id = db.Column(db.Integer, db.ForeignKey('option.id'))

    options = db.relationship('Option', backref='question', lazy='dynamic')

class Option(db.Model):
    tablename = 'option'
    id = db.Column(db.Integer, primary_key=True)
    question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
    option_text = db.Column(db.Text)
sqlite flask flask-sqlalchemy
1个回答
0
投票

移除 correct_option_id 栏目来自 Question 模式。它产生了歧义。所以数据库无法识别到底什么是正确的关系,因为有2个不同的外键。

相反,在Option中创建一个名为correct_answer的布尔值列。并用它来标记正确答案。

class Question(db.Model):
    tablename = 'question'
    id = db.Column(db.Integer, primary_key=True)
    question_text = db.Column(db.Text)

    options = db.relationship('Option', backref='question', lazy='dynamic')

    # Newly added
    @property
    def correct_option_id(self):
        for option in self.options:
            if option.correct_answer:
                return option.id



class Option(db.Model):
    tablename = 'option'
    id = db.Column(db.Integer, primary_key=True)
    question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
    option_text = db.Column(db.Text)

    # Newly added
    correct_answer = db.Column(db.Boolean, default=False)
© www.soinside.com 2019 - 2024. All rights reserved.