如何让 Pydantic 自动从可迭代对象创建列表?

How to make Pydantic to automatically create a list from an iterable?

我有一个模型:

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

    class Config:
        orm_mode = True

当我尝试用这个创建实例时:

my_model = MyModel.from_orm(foo)

pydantic 抱怨 foo.items is not a list 但它是一个可迭代的,所以我如何告诉 pydantic 自动 convert 它?我目前在做:

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

Pydantic 不会自动转换任意可迭代对象(但 does a generator) to a list. But as usual the 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)