如何使Pydantic自动从一个iterable创建列表?

2024-03-29 14:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型:

class MyModel(BaseModel):
    items: List[Item]

    class Config:
        orm_mode = True

当我尝试使用以下内容创建实例时:

my_model = MyModel.from_orm(foo)

pydantic抱怨说foo.items is not a list但是它是一个iterable,那么我如何告诉pydantic自动转换它呢?我目前正在做:

foo.items = list(foo.items)
my_model = MyModel.from_orm(foo)

Tags: from模型configmodelfoomyormitems
1条回答
网友
1楼 · 发布于 2024-03-29 14:01:24

Pydantic不会自动将任意iterable(但does生成器)转换为列表。但像往常一样validator来营救:

class MyModel(BaseModel):
    items: List[int]

    class Config:
        orm_mode = True

    @validator('items', pre=True)
    def iter_to_list(cls, v):
        return list(v)

或以可重复使用的形式:

def iter_to_list(v):
    return list(v)


class MyModel(BaseModel):
    items: List[int]

    class Config:

    _items_to_list = validator('items', pre=True, allow_reuse=True)(iter_to_list)

相关问题 更多 >