简体   繁体   English

使用 response_model fastAPI 和 Pydantic 返回深度嵌套的 json 对象

[英]return deeply nested json objects with response_model fastAPI and Pydantic

This is my schema file这是我的架构文件

from pydantic import BaseModel
from typing import Optional


class HolidaySchema(BaseModel):
    year: int
    month: int
    country: str
    language: str


class HolidayDateSchema(BaseModel):
    name: str
    date: str
    holidays: HolidaySchema | None = None

    class Config:
        orm_mode = True

and this is the router that I have这是我的路由器

@router.get("/holidays/",response_model = List[HolidayDateSchema])

The response I want to get is我想得到的回应是

[
    {
        "date": "2021-08-14",
        "name": "Independence Day",
        "holidays": { "year": 2022, "month":5, "country":"pk", "language":"en"},
        "id": 13
    },
]

Right now it doesn't support the pydantic schema with response model, I don't know why and it gives error pydantic.error_wrappers.ValidationError: 2 validation errors for HolidayDateSchema and value is not a valid dict现在它不支持响应 model 的 pydantic 模式,我不知道为什么,它给出了错误pydantic.error_wrappers.ValidationError: 2 validation errors for HolidayDateSchema并且value is not a valid dict

It would be great if anyone can specify the best to get deeply nested JSON objects with response_model.如果任何人都可以使用 response_model 指定获得深度嵌套的 JSON 对象的最佳方法,那就太好了。

HolidaySchema isn't configured with orm_mode = True . HolidaySchema 未配置orm_mode = True

You need this for all the models that you want to automagically convert from SQLAlchemy model objects.对于要从 SQLAlchemy model 对象自动转换的所有模型,您都需要这个。

class HolidaySchema(BaseModel):
    year: int
    month: int
    country: str
    language: str

    class Config:
        orm_mode = True

You can configure that setting on a common BaseModel and inherit from that instead if you want the setting for all your models.如果您想要所有模型的设置,您可以在通用 BaseModel 上配置该设置并从该设置继承。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM