marshmallowでシリアライズしている SLQALchemy オブジェクトがあります。
オブジェクトには N 個のいいね! と N 個のコメントがあります。次のようになります。
class Parent():
__tablename__ = 'parent'
title = Column(db.String(100), unique=True, nullable=False)
description = Column(db.String(500))
created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
comments = relationship('Comment')
likes = relationship('Like')
シリアライザーは次のようになります。
class CommentSerializer(Serializer):
class Meta:
fields = ('id', 'text', 'created_at', 'parent_id')
class LikeSerializer(Serializer):
class Meta:
fields = ('id', 'created_at', 'parent_id')
class ParentSerializer(Serializer):
comments = fields.Nested(CommentSerializer)
likes = fields.Nested(LikeSerializer)
class Meta:
fields = ('id', 'title', 'description', 'comments', 'likes')
私は次のようにビューでこれを実行しようとします:
allParents = Parent.query.all()
そして、これをJSONに変換します:
return jsonify({"parents": ParentSerializer(allParents, many=True).data})
それを実行しようとすると、エラーが発生しますlist indices must be integers, not str
。に由来しmarshmallow/serializer.py
ます。そこにいくつかのことを記録すると、マシュマロがtext
のリストのプロパティにアクセスしようとしているように見えます<Comment>
。それぞれに<Comment>
個別にアクセスしてから、text
プロパティにアクセスする必要があります。
シリアライザーに何か不足していますか? many=True
ParentSerializer で引数を送信すると、マシュマロに のリストを反復処理する必要があることがわかります<Parent>
。<Comment>
マシュマロに多くのまたはを期待する必要があることを伝える方法はあり<Like>
ますか?