#python #marshmallow #flask-marshmallow
#python #marshmallow #flask-marshmallow
Вопрос:
У меня есть довольно обычный класс схемы, например:
class TestSchema(db_schema.SQLAlchemyAutoSchema):
xxx = fields.Str()
name = fields.Str(validate=validate.Length(min=1), required=True, error_messages={"required": "The name is required."})
class Meta:
fields = ('id', 'name', 'description')
model = TestModel
И я хотел бы проанализировать сам класс, чтобы иметь возможность формировать некоторую метаинформацию для интерфейса. Но я не могу получить доступ к xxx или имени, например:
schema_instance = TestSchema()
schema_instance.xxx ???AttributeError: 'TestSchema' object has no attribute 'xxx'
Комментарии:
1. Вам нужен другой класс и сбросьте его,
TestSchema
и тогда он будет работать
Ответ №1:
Как комментирует @maruthi-adithya, вам нужно определить другой класс для сброса результата TestSchema; вам нужно будет использовать postload
какие дескрипторы после десериализации, в которых вы можете возвращать данные по мере необходимости, проверьте документацию для этого здесь . Ниже приведен пример:
class Test:
def __init__(self, xxx, name, id):
self.xxx = xxx
self.name = name
self.id = id
def __repr__(self):
return (
f'<Test(xxx={self.id}, name={self.name})'
)
class TestSchema(db_schema.SQLAlchemyAutoSchema):
xxx = fields.Str()
name = fields.Str(validate=validate.Length(min=1), required=True, error_messages={"required": "The name is required."})
id = fields.Integer()
class Meta:
fields = ('id', 'name', 'description')
model = TestModel
@postload
def return_as_object(self, data, **kwargs):
return Test(**data)