是否可以dump_only使用 FastAPI 的 pydantic 复制 Marshmallow 的功能,以便某些字段是“只读”,而不需要为序列化和反序列化定义单独的模式?
有时,给定 API 资源的属性子集(例如id和created_date)应该是只读的,并且应该在反序列化期间从请求有效负载中忽略(例如,当 POST 到集合或 PUT 到现有资源时),但需要对于这些相同的请求,将在响应正文中与该架构一起返回。
Marshmallow 提供了一个方便的dump_only参数,只需要为序列化和反序列化定义一个模式,并可以选择从任一操作中排除某些字段。
我见过的在 FastAPI 中复制此功能的大多数尝试(即FastAPI 文档、GitHub 问题、相关 SO 问题)倾向于为输入(反序列化)和输出(序列化)定义单独的模式,并为之间的共享字段定义一个通用的基本模式。他们俩。
根据我目前对这种方法的理解,由于以下几个原因,它似乎有点不方便:
假设我们正在为具有以下模型的调查开发一个简单的 API:
from sqlalchemy.orm import declarative_base, relationship
from sqlalchemy import (
func,
Column,
Integer,
String,
DateTime,
ForeignKey,
)
Base = declarative_base()
class SurveyModel(db.Base):
"""Table that …Run Code Online (Sandbox Code Playgroud)