序列化具有多个子级的子级的SQLAlchemy对象

2024-05-15 01:41:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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')

序列化程序如下所示:

^{pr2}$

我试着在视图中这样运行:

allParents = Parent.query.all()

并使用以下命令将其转换为JSON:

return jsonify({"parents": ParentSerializer(allParents, many=True).data})

当我尝试运行它时,我得到一个错误list indices must be integers, not str。它来自marshmallow/serializer.py。当我在其中记录一些东西时,似乎是棉花糖试图访问一个<Comment>列表的text属性。它应该分别访问每个<Comment>,然后访问text属性。在

我的序列化程序中是否缺少某些内容?我知道在ParentSerializer中发送many=True参数会告诉marshullow它应该遍历一个<Parent>的列表。有没有一种方法可以告诉棉花糖它也应该有很多<Comment>或{}?在


Tags: 对象程序falsetruedbstring序列化comment
2条回答
^{bq}$

或者,您可以这样做:

class ParentSerializer(Serializer):
    comments = fields.List(fields.Nested(CommentSerializer))
    likes = fields.List(fields.Nested(LikeSerializer))
^{bq}$

是的。也可以将many=True传递给Nested字段。在

class ParentSerializer(Serializer):
    comments = fields.Nested(CommentSerializer, many=True)
    likes = fields.Nested(LikeSerializer, many=True)

相关问题 更多 >

    热门问题