Извините, если об этом уже спрашивали, я не смог найти решение или аналогичный вопрос (возможно, используя неправильные слова).
Я обновляю существующий API Flask, который получает данные от клиента, которого мы не контролируем (не можем изменить формат данных JSON), используя marshmallow и peewee.
Формат данных выглядит следующим образом:
{
"site_id": "0102931",
"update_date": "2018/02/11-09:33:23",
"updated_by": "chan1",
"crc": "a82131cf232ff120aaf00001293f",
"data": [{"num": 1,
"id": "09213/12312/1",
"chain": "chain2",
"operator": "0000122",
"op_name": "Fred",
"oid": "12092109300293"
},
{"num": 2,
"id": "09213/12312/2",
"chain": "chain1",
"operator": "0000021",
"op_name": "Melissa",
"oid": "8883390393"
}]
}
Нас не интересует ничего в основном блоке, кроме site_id, который должен копироваться в каждый из объектов в списке при десериализации для создания моделей и хранения данных.
Это модель в peeewee:
class production_item(db.Model):
site_id = TextField(null=False)
id_prod = TextField(null=False)
num = SmallIntegerField(null=False)
chain = TextField(null=False)
operator = TextField(null=False)
operator_name = TextField(null=True)
order_id = TextField(null=False)
А это схема маршмеллоу:
class prodItemSchema(Schema):
num=String(required=True)
id=String(required=True)
chain=String(required=True)
operator=String(required=True)
op_name=String(required=False, allow_none=True)
oid=String(required=False, allow_none=True)
Я не могу найти способ передать идентификатор сайта из основной структуры с помощью метода load() и декораторов предварительной загрузки/пост-загрузки для prodItemSchema, поэтому модель не может быть создана. Кроме того, я хотел бы, чтобы зефир проверял всю структуру для меня, а не делал две части между ресурсом и схемой, как они делают в коде прямо сейчас.
Но не могу найти в документации способ сделать что-то подобное, возможно ли это?