棉花糖结果定制

时间:2018-08-23 14:11:58

标签: python sqlalchemy psycopg2 marshmallow

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

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"
        }
    }
}

并且这个“ settings.settings”看起来很丑。

有没有办法说棉花糖,我只需要值作为转储结果,

{
    "qwerty": "test"
}

可能我需要对元类做一些事情,但是我不知道该怎么办。

1 个答案:

答案 0 :(得分:0)

我知道了。我应该在我的模式中使用@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 {}