在我的Rest应用程序中,我希望返回json
格式JSONAPI
,但我需要为它创建Schema类,并再次创建我model
中已存在的每个字段。因此,我可以不从DB Model
中获取它,而不是在模式类中创建每个字段。
下面是我的模特班
class Author(db.Model):
id = db.Column(db.Integer)
name = db.Column(db.String(255))
我正在定义下面的Schema。
class AuthorSchema(Schema):
id = fields.Str(dump_only=True)
name = fields.Str()
metadata = fields.Meta()
class Meta:
type_ = 'people'
strict = True
所以,id
和name
我已经定义了两次。那么marshmallow-jsonapi
中是否有任何选项可以在模式类中指定模型名称,以便它可以从model
中获取所有字段
注意:我正在使用marshmallow-jsonapi
,我尝试了marshmallow-sqlalchemy
,它有该选项,但它不会以json
格式返回JSONAPI
答案 0 :(得分:2)
您可以将flask-marshmallow
' ModelSchema
和marshmallow-sqlalchemy
与marshmallow-jsonapi
结合使用,但需要注意的是不仅要Schema
。 }类以及SchemaOpts
类,如下所示:
# ...
from flask_marshmallow import Marshmallow
from marshmallow_jsonapi import Schema, SchemaOpts
from marshmallow_sqlalchemy import ModelSchemaOpts
# ...
ma = Marshmallow(app)
# ...
class JSONAPIModelSchemaOpts(ModelSchemaOpts, SchemaOpts):
pass
class AuthorSchema(ma.ModelSchema, Schema):
OPTIONS_CLASS = JSONAPIModelSchemaOpts
class Meta:
type_ = 'people'
strict = True
model = Author
# ...
foo = AuthorSchema()
bar = foo.dump(query_results).data # This will be in JSONAPI format including every field in the model