フラスコの安静拡張について質問があります。私はそれを使い始めたばかりで、1つの問題に直面しました。多対 1 の関係に接続されているエンティティがあり、マーシャラーを使用flask-sqlalchemy
して安らかなエンドポイントがすべての子を持つ親エンティティを返すようにします。json
私の場合、 Set には多くのパラメーターが含まれています。フラスコ安静ドキュメントを見ましたが、このケースを解決する方法についての説明はありませんでした。
明らかな何かが欠けているようですが、解決策がわかりません。これが私のコードです:
# entities
class Set(db.Model):
id = db.Column("id", db.Integer, db.Sequence("set_id_seq"), primary_key=True)
title = db.Column("title", db.String(256))
parameters = db.relationship("Parameters", backref="set", cascade="all")
class Parameters(db.Model):
id = db.Column("id", db.Integer, db.Sequence("parameter_id_seq"), primary_key=True)
flag = db.Column("flag", db.String(256))
value = db.Column("value", db.String(256))
set_id = db.Column("set_id", db.Integer, db.ForeignKey("set.id"))
# marshallers
from flask.ext.restful import fields
parameter_marshaller = {
"flag": fields.String,
"value": fields.String
}
set_marshaller = {
'id': fields.String,
'title': fields.String,
'parameters': fields.List(fields.Nested(parameter_marshaller))
}
# endpoint
class SetApi(Resource):
@marshal_with(marshallers.set_marshaller)
def get(self, set_id):
entity = Set.query.get(set_id)
return entity
restful_api = Api(app)
restful_api.add_resource(SetApi, "/api/set/<int:set_id>")
今私が呼び出す/api/set/1
と、サーバーエラーが発生します:
TypeError: 'Set' object is unsubscriptable
したがって、エンドポイントが次の json を返す set_marshaller を正しく定義する方法が必要です。
{
"id": : "1",
"title": "any-title",
"parameters": [
{"flag": "any-flag", "value": "any-value" },
{"flag": "any-flag", "value": "any-value" },
.....
]
}
助けていただければ幸いです。