首页 > 其他分享 > pydantic学习与使用-14.exclude_unset去掉未传值的字段

pydantic学习与使用-14.exclude_unset去掉未传值的字段

时间:2022-10-04 20:45:44浏览次数:56  
标签:None tel 14 skip unset exclude pydantic name

前言

使用 pydantic 定义数据模型,有些非必填的字段,我们希望在实例化时未传值的字段去掉,这样可以取值一些为None的字段。

遇到问题

age 和 address 是非必填字段

class User(BaseModel):
    name: str = ...
    tel: str = ...
    age: int = Field(None,)
    address: str = Field(None)


user = User(
    name='yoyo',
    tel='10086'
)
print(user.dict()) # {'name': 'yoyo', 'tel': '10086', 'age': None, 'address': None}

得到的结果, 没有传的字段会给到默认值

{'name': 'yoyo', 'tel': '10086', 'age': None, 'address': None}

exclude_unset去掉默认字段

可以通过 skip_defaults=True 参数跳过默认的设置项

print(user.dict(skip_defaults=True)) 

得到结果会有个警告:"skip_defaults" is deprecated and replaced by "exclude_unset"

DeprecationWarning: User.dict(): "skip_defaults" is deprecated and replaced by "exclude_unset"
  print(user.dict(skip_defaults=True)) # {'name': 'yoyo', 'tel': '10086', 'age': None, 'address': None}

{'name': 'yoyo', 'tel': '10086'}

"skip_defaults" 方法已经被 "exclude_unset" 替代了

print(user.dict(exclude_unset=True)) 

运行结果

{'name': 'yoyo', 'tel': '10086'}

这样就去掉了默认值为None的了。

标签:None,tel,14,skip,unset,exclude,pydantic,name
From: https://www.cnblogs.com/yoyoketang/p/16754414.html

相关文章

  • pydantic学习与使用-13.Field 定制字段使用别名alias
    前言pydantic里面json是一个内置属性,我想定义一个字段名称是json,这就会引起报错:Fieldname"json"shadowsaBaseModelattribute;useadifferentfieldnamewith"......
  • 【C语言_14】快速学会使用字符数组
    1.初始化字符数组#include<stdio.h>intmain(){charstr[20]="helloworld";//charstr[20]={'h','e','l','l','o','w','o','r','l','d'};printf("......
  • 安装Docker容器时,出现https://yum.dockerproject.org/repo/main/centos/7/repodata/re
    解决办法:首先确定把相应的前置包都安装好,之后操作命令行:执行yum-config-manager--disabledockerrepo命令然后再执行:sudo yum installdocker-cedocker-ce-clicont......
  • OFF14
    由小至大推导公式,从2段开始一直到n段intcuttingRope(intn){//dp[i-j]*j分为多段//i-j*j分为俩端intdp[n+1];memset(dp,0,sizeof(dp));dp......
  • 「CF1455G」Forbidden Value 题解 (DP,线段树合并)
    题目简介已知初始值\(x=0\),给定下面\(2\)种命令:set\(y\)\(v\),令\(x=y\),或花费\(v\)元钱删除该命令;if\(y\)...end,如果\(x==y\),执行if...end中的命令,否则跳......
  • 25-70K*14薪| 梅卡曼德视觉算法、C++软件开发工程师等职位招聘
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。高级C++软件开发工程师薪水:25K-60K*14薪岗位职责:1、负责相关软件系统(客户端)的设......
  • Python 教程之运算符(14)Python中==和is运算符的区别
    相等运算符(==)是Python中的比较运算符,用于比较两个操作数的值并检查值是否相等。而“ is”运算符是标识运算符,用于检查两个操作数是否引用同一个对象(存在于同一个内......
  • CF1427E Xum 题解
    (从洛谷博客搬过来的)学校比赛的时候考了这道题,我当然是一分没得。这是一道好构造题。先不说正解,我看别的题解都没有说怎么拿部分分,但是如果赛时不会正解,那么拿部分分就......
  • AGC014
    A若存在答案则答案是\(\mathcal{O}(\loga)\)的,直接模拟即可。B可以发现有解当且仅当给出的\(m\)条边存在欧拉回路。C\((\texttt{Easy}\1/0)\)删掉的障碍是......
  • CF1455G
    Statement题目写的很清楚了,看题目的翻译吧。Solution考虑if指令形成了一个嵌套关系,是一个层层包含的过程。于是可以将每个if指令与被他包含的指令之间连边,然后在开......