muo*_*uon 16 python model backend pydantic fastapi
在 pydantic 中,有一种更干净的方法可以从模型中排除多个字段,例如:
class User(UserBase):
class Config:
exclude = ['user_id', 'some_other_field']
Run Code Online (Sandbox Code Playgroud)
我知道以下有效。
class User(UserBase):
class Config:
fields = {'user_id': {'exclude':True},
'some_other_field': {'exclude':True}
}
Run Code Online (Sandbox Code Playgroud)
但我一直在寻找像 django Rest Framework 这样更干净的东西,你可以在其中指定排除或包含的列表。
小智 12
Pydantic 将排除以下划线开头的类变量。因此,如果它适合您的用例,您可以重命名您的属性。
class User(UserBase):
_user_id=str
some_other_field=str
....
Run Code Online (Sandbox Code Playgroud)
要排除字段,您还可以exclude使用Field:
from pydantic import BaseModel, Field
class Mdl(BaseModel):
val: str = Field(
exclude=True,
title="val"
)
Run Code Online (Sandbox Code Playgroud)
但是,在类中添加排除参数的优点Config似乎是您可以使用以下命令获取排除参数的列表
print(Mdl.Config.exclude)
Run Code Online (Sandbox Code Playgroud)
我为我的 json 写了这样的东西:
from pydantic import BaseModel
class CustomBase(BaseModel):
def json(self, **kwargs):
include = getattr(self.Config, "include", set())
if len(include) == 0:
include = None
exclude = getattr(self.Config, "exclude", set())
if len(exclude) == 0:
exclude = None
return super().json(include=include, exclude=exclude, **kwargs)
class User(CustomBase):
name :str = ...
family :str = ...
class Config:
exclude = {"family"}
u = User(**{"name":"milad","family":"vayani"})
print(u.json())
Run Code Online (Sandbox Code Playgroud)
你可以重写 dict 和其他方法。
| 归档时间: |
|
| 查看次数: |
46739 次 |
| 最近记录: |