【问题标题】:Take JSONAPI schema from model从模型中获取 JSONAPI 模式
【发布时间】:2017-11-08 12:50:13
【问题描述】:

在我的 Rest 应用程序中,我想像 JSONAPI 格式一样返回 json,但我需要为它创建 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-jsonapifor 它,我已经尝试过 marshmallow-sqlalchemy ,它具有该选项但它不会以 JSONAPI 格式返回 json

【问题讨论】:

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


    【解决方案1】:

    您可以将flask-marshmallowModelSchemamarshmallow-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
    

    【讨论】:

    • 感谢您的帮助,现在每当我调用 'foo.load(query_results)' 时,它都会从模型模式调用函数并请求数据库会话。有什么方法可以从 Schema 调用 load 吗?
    • 你是在请求之外运行这个吗?
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 2017-07-06
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多