Flask-SQLAlchemy-棉花糖嵌套
Flask-SQLAlchemy-Marshmallow Nesting
我正在尝试使用 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'}}]
您正在引用您的架构中不存在的模型。
除此之外,Items
中的 category
不可迭代(它是 "one-to-many" 关系的 "one" 端),因此 many=True
参数抛出一个错误。
而category
应该出现在Meta
class的fields
属性中ItemSchema
所以它实际上出现在序列化中。
应该是这样的:
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)
当然,您可以根本不在元 classes 中包含 fields
属性,因为 model
已经负责映射模型。
我正在尝试使用 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'}}]
您正在引用您的架构中不存在的模型。
除此之外,Items
中的 category
不可迭代(它是 "one-to-many" 关系的 "one" 端),因此 many=True
参数抛出一个错误。
而category
应该出现在Meta
class的fields
属性中ItemSchema
所以它实际上出现在序列化中。
应该是这样的:
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)
当然,您可以根本不在元 classes 中包含 fields
属性,因为 model
已经负责映射模型。