0

I have dict-like object, like:

    data = {
    # A lot of data here
    'json_data_feed':
        {'address':
             {'name': 'home_sweet_home'}
         }
    # A lot of data here
}

And i want to create Pydantic model with few fields. Im trying to do this:

class OfferById(pydantic.BaseModel):
    short_address: str = pydantic.Field(..., alias='name')

    @pydantic.validator('short_address', pre=True)
    def validate_short_address(cls, value):
        return value['json_data_feed']['address']

And it fails with exception:

    Some = OfferById(**data)
  File "pydantic/main.py", line 406, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for OfferById
name
  field required (type=value_error.missing)

Are there any solution here?

1 Answers1

1

You can achieve this by means of root validator. For example:

class OfferById(BaseModel):
    short_address: str = Field(..., alias='name')

    @root_validator(pre=True)
    def validate_short_address(cls, values):
        values['name'] = values['json_data_feed']['address']['name']
        return values


print(OfferById(**data))
alex_noname
  • 26,459
  • 5
  • 69
  • 86