如何使用用于在 MongoDB 中保存/检索文件的二进制字段创建 Pydantic 模型

问题描述 投票:0回答:1

我正在实现一个 FastAPI 服务器,允许在 MongoDB 中上传/下载文件以及其他字段。

我的 Pydantic 模型是(简化的):

PyObjectId = Annotated[str, BeforeValidator(str)]

class Form(BaseModel):
    id: Optional[PyObjectId] = Field(alias="_id", default=None)
    is_attachment: bool = Field(...)
    content_type: str = Field(...)
    file_name: str = Field(...)
    file_data: Binary = Field(...)
    model_config = ConfigDict(
        arbitrary_types_allowed=True,
        json_schema_extra={
            "example": {
                "file_name": "file.pdf",
                "is_attachment": True,
                "content_type": "application/pdf",
                "file_data": "JVBERi0xLjQK...",
            }
        },
    )

我有一个简单的 GET 返回上述模型对象的列表:

class FormCollection(BaseModel):
    forms: List[Form]


@app.get("/forms/", response_description="List all forms", response_model=FormCollection, response_model_by_alias=False,)
async def list_forms():
    return FormCollection(forms=await forms_collection.find().to_list(1000))

我运行服务器,但是当打开 OpenAPI (Swagger) 页面时,我得到:

pydantic.errors.PydanticInvalidForJsonSchema: Cannot generate a JsonSchema for core_schema.IsInstanceSchema (<class 'bson.binary.Binary'>)

Pydantic 似乎不喜欢“file_data”二进制字段。问题是,如何在 Pydantic 中定义 bson.binary.Binary 字段。

mongodb file binary fastapi pydantic
1个回答
0
投票

找到答案,我需要使用“字节”Pydantic 数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.