【问题标题】:pydantic exclude multiple fields from modelpydantic 从模型中排除多个字段
【发布时间】:2022-01-05 03:31:21
【问题描述】:

在 pydantic 中是否有一种更简洁的方法可以从模型中排除多个字段,例如:


class User(UserBase):
    class Config:        
        exclude = ['user_id', 'some_other_field']

我知道以下工作,但我正在寻找像 django 这样更干净的东西。


class User(UserBase):

    class Config:       
        fields = {'user_id': {'exclude':True}, 
                   'some_other_field': {'exclude':True}
                 }

【问题讨论】:

    标签: python model backend fastapi pydantic


    【解决方案1】:

    我为我的 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())
    

    您可以覆盖 dict 和其他方法。

    【讨论】:

      【解决方案2】:

      Pydantic 将排除以下划线开头的类变量。 因此,如果它适合您的用例,您可以重命名您的属性。

      class User(UserBase):
          _user_id=str
          some_other_field=str
          ....
      

      【讨论】:

      • 一个可能的问题是严格类型验证不适用于带有下划线的类变量。您可以将非字符串传递给_user_id,它可能会导致代码在您不期望的地方中断
      猜你喜欢
      • 2021-11-03
      • 2021-01-29
      • 2022-11-26
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      相关资源
      最近更新 更多