【问题标题】:Multiple foreign key paths linking the tables链接表的多个外键路径
【发布时间】:2020-05-12 07:38:01
【问题描述】:

我正在做一个 MCQ 问题/答案数据库架构。但这给了我一个错误。我在这上面拉头发。

"无法确定父/子表之间的关联条件 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】:

    Question 模型中删除correct_option_id 列。它会产生歧义。因此,由于 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多