4

在我的 Rest 应用程序中,我想返回json类似的JSONAPI格式,但我需要为它创建 Schema 类并再次创建我的model. 因此,我不能从模式类中创建每个字段,而不是从DB Model.. 下面是我的模型类

class Author(db.Model):
  id = db.Column(db.Integer)
  name = db.Column(db.String(255))

我正在定义如下所示的模式。

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,它具有该选项但它不jsonJSONAPI格式返回

4

1 回答 1

3

您可以使用flask-marshmallow'sModelSchemamarshmallow-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
于 2017-11-08T19:14:05.427 回答