Tay*_*ler 2 python sqlalchemy flask flask-sqlalchemy marshmallow
我有一个SLQALchemy对象,我正在使用marshmallow序列化.
该对象有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')
Run Code Online (Sandbox Code Playgroud)
序列化器看起来像这样:
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')
Run Code Online (Sandbox Code Playgroud)
我尝试在视图中运行它,如下所示:
allParents = Parent.query.all()
Run Code Online (Sandbox Code Playgroud)
并将其转换为JSON:
return jsonify({"parents": ParentSerializer(allParents, many=True).data})
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,我收到一个错误list indices must be integers, not str.它来自marshmallow/serializer.py.当我在那里记录一些东西时,似乎棉花糖正试图访问text列表的属性<Comment>.它应该是单独访问每个,<Comment>然后访问该text属性.
我在序列化器中遗漏了什么吗?我知道many=True在ParentSerializer中发送参数告诉marshmallow它应该迭代一个列表<Parent>.有没有办法告诉棉花糖它还应该期待很多<Comment>或<Like>?
有没有办法告诉棉花糖它还应该期待很多
<Comment>或<Like>?
是.您也可以传递many=True到Nested字段.
class ParentSerializer(Serializer):
comments = fields.Nested(CommentSerializer, many=True)
likes = fields.Nested(LikeSerializer, many=True)
Run Code Online (Sandbox Code Playgroud)