Взять схему JSONAPI из модели

В моем приложении 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

Итак, здесь id и name я определил это дважды. так есть ли какая-либо опция в marshmallow-jsonapi для назначения имени модели в классе схемы, чтобы она могла принимать все поля из model
Примечание: я использую marshmallow-jsonapiдля этого, я пробовал marshmallow-sqlalchemy, у него есть эта опция, но она не возвращает json в формате JSONAPI


person Sanjay    schedule 08.11.2017    source источник


Ответы (1)


Вы можете использовать ModelSchema и marshmallow-sqlalchemy flask-marshmallow в сочетании с 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
person Luis Orduz    schedule 08.11.2017
comment
Спасибо за вашу помощь, теперь всякий раз, когда я вызываю «foo.load(query_results)», он вызывает функцию из схемы моделей и запрашивает сеанс базы данных. есть ли способ вызвать загрузку из схемы? - person Sanjay; 13.11.2017
comment
Вы запускаете это вне запроса? - person Luis Orduz; 18.11.2017