Python 在棉花糖模式中未返回相关字段(也包括flask/sqlalchemy)

Python 在棉花糖模式中未返回相关字段(也包括flask/sqlalchemy),python,sqlalchemy,flask-sqlalchemy,marshmallow,Python,Sqlalchemy,Flask Sqlalchemy,Marshmallow,使用棉花糖2.18.0,flask棉花糖0.9.0 我正在建立一个处理一系列问题和答案的系统。显示的下一个问题取决于上一个问题的答案。为了对此建模,我有两个答案外键指向问题 class Question(BaseModel): question = db.Column(db.String(128), unique=True, nullable=False) answers = db.relationship( "Answer", backref="question

使用
棉花糖
2.18.0,
flask棉花糖
0.9.0

我正在建立一个处理一系列问题和答案的系统。显示的下一个问题取决于上一个问题的答案。为了对此建模,我有两个
答案
外键指向
问题

class Question(BaseModel):
    question = db.Column(db.String(128), unique=True, nullable=False)
    answers = db.relationship(
        "Answer", backref="question", foreign_keys="Answer.question_id"
    )
    next_question = db.relationship(
        "Answer", backref="next_question", foreign_keys="Answer.next_question_id"
    )
问题是
AnswerSchema
没有显示
next\u question
的超链接或任何数据,我正试图使用flask marshmallow的超链接相关函数将其引入。但是,它确实适用于
问题
(答案所回答的问题)

如果相关,我会在
答案模式中看到
下一个问题
。\u声明的字段
,但不会在
答案模式.dump(answer).data中看到

顺便说一句,
嵌套的
在我查询
问题
时在另一个方向上运行良好:

$ http localhost:5000/questions/1/
{
    "answers": [
        {
            "answer": "Great",
            "id": 1,
            "question": "/questions/1/",
        },
        {
            "answer": "More than great",
            "id": 2,
            "question": "/questions/1/",
        }
    ],
    "id": 1,
    "question": "How are you doing today?",
}
无论如何,我不确定超链接相关的方法是否正确,但如果不是,我不知道该怎么办。我非常希望理解什么是正确的方法(我是否应该在另一个方向上使用
嵌套的
?),以及为什么我在文档中遗漏了什么

这里是相关的(我删除了我可以保持简短的内容,它是来自不同文件的混合):

从flask\u sqlalchemy导入sqlalchemy
从美国进口棉花糖
从sqlalchemy\u mixins导入所有功能
db=SQLAlchemy()
ma=棉花糖()
类GenericMixin:
id=db.Column(db.Integer,主键=True)
类BaseModel(db.Model、AllFeaturesMixin、GenericMixin):
__抽象=真
BaseModel.set_会话(db.session)
从flask_classful导入FlaskView
从webargs导入字段
从webargs.flaskparser导入使用
from.resources.user导入用户,用户
课堂问题(基本模型):
question=db.Column(db.String(128),unique=True,nullable=False)
answers=db.relationship('Answer',backref='question',
外键(答案。问题号)
类模式(ma.ModelSchema):
类元:
模型=问题
answers=ma.Nested(AnswerSchema,many=True,strict=True)
问题\模式=问题模式(严格=真)
课程问题视图(烧瓶视图):
def get(自我,id):
question=question.query.get\u或\u 404(id)
返回问题\u schema.jsonify(问题)
课堂答案(基本模型):
answer=db.Column(db.String(128),unique=True,nullable=False)
问题id=db.Column(db.Integer,
db.ForeignKey('question.id'),
可空=假)
下一个问题id=db.Column(db.Integer,
db.ForeignKey('question.id'),
nullable=True)
类应答模式(ma.ModelSchema):
类元:
模型=答案
question=ma.HyperlinkRelated('QuestionsView:get')
#救命啊!我如何让它返回到下一个问题的链接?
next_question=ma.HyperlinkRelated('QuestionsView:get')
应答模式=应答模式(严格=真)
课堂回答视图(烧瓶视图):
def get(自我,id):
answer=answer.query.get\u或\u 404(id)
返回答案\u schema.jsonify(答案)
感谢lftl提供了答案。我只需将backref添加到
问题

class Question(BaseModel):
    question = db.Column(db.String(128), unique=True, nullable=False)
    answers = db.relationship(
        "Answer", backref="question", foreign_keys="Answer.question_id"
    )
    next_question = db.relationship(
        "Answer", backref="next_question", foreign_keys="Answer.next_question_id"
    )
报告还包含其他有用的讨论。我发现
HyperlinkRelated
不支持外键空值,但是有一个开放的PR,monkey补丁工作得很好