Python 棉花糖结果定制

Python 棉花糖结果定制,python,sqlalchemy,psycopg2,marshmallow,Python,Sqlalchemy,Psycopg2,Marshmallow,我有一个sqlalchemy模型,该模型带有jsonb字段和棉花糖模式: class Settings(db.Model): id = db.Column(UUID, primary_key=True, server_default=text("uuid_generate_v4()")) settings = db.Column(JSONB) class SettingsSchema(ma.ModelSchema): class M

我有一个sqlalchemy模型,该模型带有jsonb字段和棉花糖模式:

class Settings(db.Model):
    id = db.Column(UUID, primary_key=True,
                   server_default=text("uuid_generate_v4()"))
    settings = db.Column(JSONB)

class SettingsSchema(ma.ModelSchema):
    class Meta:
        model = Settings
我用json将其序列化,如下所示:

settings = Settings(settings={'qwerty': 'test'})
settings_schema = SettingsSchema(many=False, exclude=('id', ))
body = settings_schema.dump(settings).data
模型的json视图如下所示:

{
  "settings": {
    "qwerty": "test"
  }
}
当我使用这个模式作为嵌套模式时,我的结果如下

{
    "id": 123456,
    "some_field": "some_field_value",
    "other_field": "other_field_value",
    "settings": {
        "settings": {
            "qwerty": "test"
        }
    }
}
这个“设置。设置”看起来很难看

我的意思是,有没有一种方法可以告诉棉花糖,我只需要将值作为转储结果

{
    "qwerty": "test"
}

可能我需要用元类做些什么,但我不知道该怎么做。

我已经知道了。我应该在我的模式中使用@post_dump:

class SettingsSchema(ma.ModelSchema):

    class Meta:
        model = WorkspaceSettings

    @post_dump(pass_many=True)
    def unwrap_settings(self, data, many):

        if many:
            return [item['settings'] or {} for item in data]
        else:
            return data['settings'] or {}