我有一个具有颜色属性的pydantic模型
from pydantic import BaseModel
from pydantic.color import Color
class MyModel(BaseModel):
color: Color
我定义了返回MyModel
的FastAPI路由器
@router.get("/", response_model=MyModel)
async def get_my_model() -> MyModel:
item = await DbItem.get()
return MyModel(**item.dict())
在此设置中,pydantic将颜色转换为命名颜色(例如black
(。
我的前端无法识别命名的颜色。
如何指向pydantic以返回十六进制颜色?
使用Color.as_hex
:
from pydantic import BaseModel
from pydantic.color import Color
class MyModel(BaseModel):
color: Color
my_model = MyModel(color=Color("black"))
print(my_model.color.as_hex()) # '#000'
要在响应中获得十六进制值,可以添加一个自定义json编码器:
class MyModel(BaseModel):
color: Color
class Config:
json_encoders = {Color: lambda c: c.as_hex()}