Pydantic如何分离field和alias
问题分析
即假如需要返回的是:
{
"isStar": ture
}
在python中一般不使用isStar
这种命名方式, 所以我们需要使用别名定义模型:
class TestModel(BaseCategoryModel):
is_star: bool = Field(..., alias="isStar")
而且在SQLAlchemy
中也要定义相关字段, 也是由于命名的习惯性, 定义为:
class Test(Base):
__tablename__ = 'Test'
is_star = Column(Boolean, nullable=False, default=False, comment="是否星标"
但是假如我们直接让Pydantic
从ORM中读取数据的话, 会报错, 原因也很简单
问题解决
TestModel
这个模型接收和输出的都是别名后的字段, 即isStar
而Test
这个表中没有该字段, 所以会报错!
也就是说, 只需要我们让Pydantic
输出isStar
但接收的是is_star
, 不就完美解决了吗!
为此我去Github上看了一下Issues: #2429, 发现了一个差不多的issue, 然后看了一下官方文档:
发现了allow_population_by_field_name
配置( 在v1.0
之前是allow_population_by_alias
), 该配置为: 别名字段是否可以 由模型属性给出的名称以及别名填充
所以修改后的TestModel
模型为:
class TestModel(BaseCategoryModel):
is_star: bool = Field(..., alias="isStar")
class Config:
orm_mode = True
allow_population_by_field_name = True
如此便可以让TestModel
接收is_star
而返回的是isStar
本文来自博客园,作者:403·Forbidden,转载请注明原文链接:https://www.cnblogs.com/lczmx/p/15904536.html