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补丁工作得很好