#python #pydantic
#python #pydantic
Вопрос:
Я хочу проверить схему полезной нагрузки, и для этого я использую Pydantic. Класс, созданный путем наследования Pydantic BaseModel
, называется as PayloadValidator
и имеет два атрибута: addCustomPages
список словарей и deleteCustomPages
список строк.
class NestedCustomPages(BaseModel):
"""This is the schema for each custom page."""
html: str
label: str
type: int
class PayloadValidator(BaseModelWithContext):
"""This class defines the payload load schema and also validates it."""
addCustomPages: Optional[List[NestedCustomPages]]
deleteCustomPages: Optional[List[str]]
Я хочу объявить любой из атрибутов class PayloadValidator
как необязательный. Я пытался найти решение для этого, но ничего не смог найти.
Ответ №1:
Некоторое время назад на странице pydantic Github возник вопрос по этому поводу: https://github.com/samuelcolvin/pydantic/issues/506 . В заключение приводится игрушечный пример с моделью, которая требует заполнения a или b с помощью средства проверки:
from typing import Optional
from pydantic import validator
from pydantic.main import BaseModel
class MyModel(BaseModel):
a: Optional[str] = None
b: Optional[str] = None
@validator('b', always=True)
def check_a_or_b(cls, b, values):
if not values.get('a') and not b:
raise ValueError('Either a or b is required')
return b
mm = MyModel()
Комментарии:
1. Для читателей порядок определения
a
иb
имеет смысл. В этом примере приcheck_a_or_b
запускеvalues
может содержатьa
только потомуb
, что определяется впоследствии.