gpt4 book ai didi

Flask-SQLAlchemy-棉花糖嵌套

转载 作者:行者123 更新时间:2023-12-03 15:37:35 24 4
gpt4 key购买 nike

我正在尝试使用 Flask 中的 Marshmallow 从一对多关系模型中序列化数据。我阅读了 Marshmallow 和 SQLAlchemy 文档,但无法使其工作。任何人都可以帮助我。

楷模:

class Category(db.Model):
__tablename__ = 'category_mn'

id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(45))
status = db.Column(db.Integer, server_default=db.FetchedValue())
items = db.relationship('Items', backref='category', lazy='dynamic')
timestamp = db.Column(db.DateTime, server_default=db.FetchedValue())


class Items(db.Model):
__tablename__ = 'items_mn'

id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100))
category_id = db.Column(db.Integer, db.ForeignKey('category_mn.id'))
timestamp = db.Column(db.DateTime, server_default=db.FetchedValue())

架构:
class CatSchema(ma.ModelSchema):
class Meta:
model = Category
fields = ('id', 'name', 'status')


class ItemSchema(ma.ModelSchema):

class Meta:
model = Items
fields = ('id', 'name')
category = ma.Nested(CatSchema, many=True)

我正在寻找这样的输出:
[{'id':1, 'name':'Test', 'category':{'id':1, 'name':'Test Cat'}}]

最佳答案

您正在引用架构中不存在的模型。

除此之外,categoryItems是不可迭代的(它是“一对多”关系的“一”方),所以 many=True参数抛出错误。

category应该出现在 fields Meta 的属性ItemSchema 的类(class)所以它实际上出现在序列化中。

应该是这样的:

class CatSchema(ma.ModelSchema):
class Meta:
model = Category
fields = ('id', 'name', 'status')


class ItemSchema(ma.ModelSchema):

class Meta:
model = Items
fields = ('id', 'name', 'category')
category = ma.Nested(CatSchema)

当然,您可以简单地不包括 fields元类中的所有属性,因为 model已经在负责映射模型。

关于Flask-SQLAlchemy-棉花糖嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511079/

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