Расширить схему Marshmallow, но переопределить требуемое свойство поля

#python #inheritance #marshmallow

#python #наследование #marshmallow

Вопрос:

Вопрос новичка, но у меня простая схема:

 class User(Schema):
    name = fields.Str(required=True)
    email = fields.Str(required=True)
 

И я хочу расширить его, но в расширенном случае сделать поле необязательным

 class UserIHavePhoneNumberFor(User):
    phone = fields.Str(required=True)
    # Don't Care about Email because I can pester them via phone!
 

Я проверил документы, но не могу найти способ сделать это.
Любая помощь?

Спасибо!

Ответ №1:

Вероятно, этого нет в документах, потому что это всего лишь базовые правила наследования классов в python.

 class UserIHavePhoneNumberFor(User):
    phone = fields.Str(required=True)
    email = fields.Str(required=False)
 

Если вам нужны более сложные правила, вы всегда можете просто написать свои собственные правила проверки:

https://marshmallow.readthedocs.io/en/stable/extending.html#raising-errors-in-pre-post-processor-methods

или даже:

https://marshmallow.readthedocs.io/en/stable/extending.html#schema-level-validation

Обычно лучше попробовать и посмотреть, сможете ли вы избежать их использования в первую очередь, проявив разумность в объявлении своих полей, но это есть, когда вам это нужно.

Ответ №2:

Вы ищете частичную загрузку?

Пропуск required=True проверки

https://marshmallow.readthedocs.io/en/stable/quickstart.html#partial-loading