在 pydantic 中动态创建嵌套模型
Dynamic created nested model in pydantic
在我的用例中,我需要动态创建嵌套模型,重用模型元素。例如。我想定义一个地址模型,并为一个人模型重新定义它:
from pydantic import Field, create_model
name = Field('a name')
street = Field('a street')
city = Field('a city')
address = create_model('address', street=street, city=city)
person = create_model('person', name=name, address=address)
locationdata = dict(street='somestreet', city='sometown')
print(address.parse_obj(locationdata).dict())
alicedata = dict(name='alice', address=locationdata)
print(person.parse_obj(alicedata).dict())
# Gives:
#
# {'street': 'somestreet', 'city': 'sometown'}
# {'name': 'alice'}
位置数据从来没有 'reaches' 人,虽然直接使用它有效。有什么建议么? create_model
是这项工作的正确工具吗?
您需要将 person
创建为:
person = create_model('person', name=name, address=(address, ...)) # address model, required
# OR
person = create_model('person', name=name, address=address()) # instantiate default value
因为 create_model
通过 (<type>, <default value>)
形式的元组或仅通过默认值定义字段。
在我的用例中,我需要动态创建嵌套模型,重用模型元素。例如。我想定义一个地址模型,并为一个人模型重新定义它:
from pydantic import Field, create_model
name = Field('a name')
street = Field('a street')
city = Field('a city')
address = create_model('address', street=street, city=city)
person = create_model('person', name=name, address=address)
locationdata = dict(street='somestreet', city='sometown')
print(address.parse_obj(locationdata).dict())
alicedata = dict(name='alice', address=locationdata)
print(person.parse_obj(alicedata).dict())
# Gives:
#
# {'street': 'somestreet', 'city': 'sometown'}
# {'name': 'alice'}
位置数据从来没有 'reaches' 人,虽然直接使用它有效。有什么建议么? create_model
是这项工作的正确工具吗?
您需要将 person
创建为:
person = create_model('person', name=name, address=(address, ...)) # address model, required
# OR
person = create_model('person', name=name, address=address()) # instantiate default value
因为 create_model
通过 (<type>, <default value>)
形式的元组或仅通过默认值定义字段。