从模型中获取JSONAPI模式

时间:2017-11-08 12:50:14

标签: python flask flask-sqlalchemy marshmallow flask-restplus

在我的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

所以,idname我已经定义了两次。那么marshmallow-jsonapi中是否有任何选项可以在模式类中指定模型名称,以便它可以从model中获取所有字段 注意:我正在使用marshmallow-jsonapi,我尝试了marshmallow-sqlalchemy,它有该选项,但它不会以json格式返回JSONAPI

1 个答案:

答案 0 :(得分:2)

您可以将flask-marshmallow' ModelSchemamarshmallow-sqlalchemymarshmallow-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