如何让 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)
我有一个模型:
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)