0

という名前のモデルがありPost、これには というブール値フィールドがありis_answerます。a のis_answerフィールドPostが True の場合、それは「質問」です。そうでなければ、それは「答え」です。次の質問と回答の関係を作成したいと思います。

1 つの「質問」には多くの「回答」が含まれる場合がありますが、1 つの「回答」には 1 つの「質問」しかありません。「質問」も「回答」も本質的にPosts であるという事実から、関係は自己参照的でなければならないと思います。

これが私が試したことです:

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    is_question = db.Column(db.Boolean)
    post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
    question = db.relationship('Post', backref=db.backref('answer', lazy='dynamic'), uselist=False, lazy='dynamic')

エラーは次のとおりです。

ArgumentError: Post.question と back-reference Post.answer は両方とも同じ方向記号 ('ONETOMANY') です。多対一側に remote_side を設定するつもりでしたか?

4

2 に答える 2

1

以下の質問と回答の表を使用できます。

class Answer(Base):
        __tablename__="answers"
        id = Column(Integer, primary_key=True)
        mcq_id = Column(Integer,ForeignKey('questions.id'))
        answer_text = Column(Text())
        is_correct = Column(Boolean, nullable=False, default=False)

    class Question(Base):
        __tablename__="questions"
        id = Column(Integer, primary_key=True)
        question_text = Column(Text())
        answer_explanation = Column(Text())
        answer_choices = relationship('Answer',
                                     primaryjoin="and_(Question.id == Answer.mcq_id )",
                                     cascade="all, delete-orphan",
                                     foreign_keys=[Answer.mcq_id])
# If you have more than one answers then define this function in your model.
     def has_more_than_one_correct_answer(self):
        count = 0 
        for choice in self.answer_choices:
            if choice.is_correct:
                count = count + 1
        if count > 1:
            return True
        else:
            return False

2 つのテーブル間の関係を確認できます。また、 sqlalchemy を使用している場合は、joinedloadまたはを使用して関係にアクセスできます。joinedload_all

于 2016-09-27T15:58:59.703 に答える