Pydantic颜色类型仅限十六进制



我有一个具有颜色属性的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()}

最新更新