【问题标题】:Dynamic created nested model in pydantic在 pydantic 中动态创建嵌套模型
【发布时间】:2021-05-11 18:08:19
【问题描述】:

在我的用例中,我需要动态创建嵌套模型,重用模型元素。例如。我想定义一个地址模型,并为一个人模型重新使用它:

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'}

位置数据永远不会“到达”该人,尽管直接使用它是有效的。有什么建议么? create_model 是适合这项工作的工具吗?

【问题讨论】:

    标签: python pydantic


    【解决方案1】:

    您需要创建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>) 形式的元组或只是一个默认值来定义字段。

    【讨论】:

    • 非常感谢您向我解释它,工作得很好! :-)
    猜你喜欢
    • 2020-05-22
    • 2022-01-15
    • 2021-09-06
    • 2022-07-28
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2022-11-26
    • 2020-07-04
    相关资源
    最近更新 更多