Pydantic ValidationError для модели наследования (вложенной)
Существует структура моделей с наследованием
class CampaignAdditionalData(BaseModel):
campaigns: List[CampaignData]
stages: List[CreativeUsageStage]
language_mode: ReplicationLanguageMode
creative_rotation_type: CreativeRotationType
class CampaignData(BaseModel):
title: NonEmptyString
geo_segment: NonEmptyString
ac_type: ACType
conversion: Conversion
asset_type: GoogleCampaignAssetType
date: datetime.date
name: NonEmptyString
budget: PositiveDecimal
cpa: PositiveDecimal
Вот как код вызывает обработку входящих параметров
from pydantic import ValidationError, parse_obj_as
def check_campaigns_data(request: HttpRequest) -> JsonResponse:
data = json.loads(request.body.decode('utf-8'))
try:
campaign_data = parse_obj_as(CampaignAdditionalData, data)
except ValidationError as e:
response = {'status': 'validation_error', 'errors': e.errors()}
return JsonResponse(response)
.....
....
Если возникает исключение, например, в поле geo_segment в поле CampaignData команда
print(response) внутри блока except return
{
'status': 'validation_error',
'errors': [{'loc': ('__root__', 'campaigns', 0, '__root__'),
'msg': 'No such geo segment found',
'type': 'assertion_error'}]
}
Из этого видно, что pydantic ValidationError возвращает поле campaigns общей CampaignAdditionalData модели как loc значение
('__root__', 'campaigns', 0, '__root__')
Есть ли способ получить имя поля geo_segment в сообщении об ошибке, т.е. спуститься еще ниже в иерархии полей?