2016-10-06 4 views
1

Использование Python, флягу и зефир, если у меня есть схема:Как передать параметр в схеме Зефир

class ParentSchema(Schema): 
    id = fields.Int(dump_only=True) 
    children = fields.Nested('ChildSchema', dump_only=True) 

и класс Parent, который имеет метод:

class Parent(): 
    getChildren(self, params): 
     pass 

Как Я получаю Marshmallow, чтобы передать необходимые параметры Parent.getChildren при сериализации объекта, а затем заполнить ParentSchema.children с результатами?

ответ

2

Таким образом, решение состоит в том, чтобы добавить класс get_attribute к классу схемы и присвоить параметры атрибуту context класса ParentSchema. Это изменяет поведение по умолчанию, которое использует Marshmallow для извлечения атрибутов класса при построении схемы.

class ParentSchema(Schema): 
    id = fields.Int(dump_only=True) 
    children = fields.Nested('ChildSchema', dump_only=True) 

    def get_attribute(self, key, obj, default): 
     if key == 'children': 
      return obj.getChildren(self.context['params']) 
     else: 
      return getattr(obj, key, default)