相关疑难解决方法(0)

当 pydantic 模型是另一个模型的嵌套子模型时,排除该模型上的字段

我有一个 pydantic 模型,我想动态排除其中的字段。

我可以通过覆盖dict模型上的函数来做到这一点,以便它可以采用我的自定义标志,例如:

class MyModel(BaseModel):
  field: str

  def dict(self, **kwargs):
    if ('exclude_special_fields' in kwargs):
       super().dict(exclude={"field": True}, **kwargs)

    super().dict(**kwargs)
Run Code Online (Sandbox Code Playgroud)

.dict但是,如果我的模型是调用它的另一个模型的子模型,则这不起作用:

class AnotherModel(BaseModel):
  models: List[MyModel]

AnotherModel(models=[...]).dict(exclude_special_fields=True) # does not work
Run Code Online (Sandbox Code Playgroud)

这是因为当MyModel.dict()调用时,它不会使用与父级相同的参数来调用。

dict也可以在父模型上编写一个覆盖,以指定任何子组件的排除(例如exclude={"models": {"__all__": {"field": True}}}),但在我的现实世界示例中,我有许多使用这个子模型的父模型,并且我不想让为每一个写一个覆盖。

无论如何,我可以确保子模型知道何时排除字段吗?

额外的上下文

额外的上下文对于问题来说并不完全重要,但我想要这样做的原因是排除模型上的某些字段(如果它从 API 调用返回)。

python pydantic

8
推荐指数
1
解决办法
3806
查看次数

标签 统计

pydantic ×1

python ×1