Python FastAPI:拥有超类模型 .dict() 还包括子类键

Python FastAPI: Having a superclass model .dict() also include the subclass keys

为 Python 3.7+ 使用 FastAPI 我有以下 BaseDocument class:

class BaseDocument(BaseModel):
    name: str
    category: str
    description = "Base Document"
    type: str

    class Config:
        schema_extra = {
            "example": {
                "name": "stack_instance_document_example",
                "description":
                "an example of a document, using the stack_instance type",
                "example_field": "Random",
                "category": "items",
                "type": "example_document"
            }
        }

还有一个子classing模型:

class ExampleModel(BaseModel):
    name: str
    type = "example_document"
    category = "items"
    "example_field": str

现在,如果我使用 class_config 模式额外示例执行一个 API 调用,我期待一个 BaseDocument 并且我在该 BaseDocument 上使用 .dict(),结果dict 不包括 "example_field" 键。

例如,

@router.put('')
def put_document(document: BaseDocument):
    """Update (or create) the document with a specific type and an optional name given in the payload"""
    logger.info(f"[PutDocument] API PUT request with data: {BaseDocument}")

    task = DocumentTask({
        'channel': 'worker',
        'document': document.dict(),
        'subtype': "PUT_DOCUMENT"
    })
    ....

我日志中的document.dict()只有BaseDocument的字段。无论如何要获得完整文档的字典表示?

评论中的答案有效,但遗憾的是会导致缺少预填充的通用示例。 我为我的用例找到的最佳解决方案是直接使用 Request 并查看 JSON 主体(参见 https://www.starlette.io/requests/)——其中包括所有 key/values,同时保持预FastAPI

的填写示例