gpt4 book ai didi

python - 序列化具有多个子项的 SQLAlchemy 对象

转载 作者:行者123 更新时间:2023-11-28 20:22:09 24 4
gpt4 key购买 nike

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

我尝试像这样在 View 中运行它:

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属性(property)。

我的序列化程序中是否遗漏了什么?我知道发送 many=True ParentSerializer 中的参数告诉 marshmallow 它应该遍历 <Parent> 的列表.有没有办法告诉棉花糖它也应该期待很多<Comment><Like>

最佳答案

Is there a way to tell marshmallow that it should also expect many <Comment> or <Like>?

是的。你也可以通过 many=TrueNested字段。

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

关于python - 序列化具有多个子项的 SQLAlchemy 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com