- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含可选字段的 pydantic 对象定义。我希望能够将该字段配置为仅在它不是 None
时才被序列化。
class MyObject(BaseModel):
id: str
msg: Optional[str] = None
pri: Optional[int] = None
MyObject(id="123").json() # ideal output: {"id": "123", "pri": null}
MyObject(id="123", msg="hello").json() # ideal output: {"id": "123", "msg": "hello", "pri": null}
我希望能够精确指定字段,因为这个对象将被嵌套,并且还有其他可选字段应该返回,无论它们是否为 None
。solution to set json option exclude_none
到 True
不适用于此目的。
最佳答案
你不能用 pydantic 甚至像 attrs 这样更强大的库来做这样的事情。原因可能是因为它不是返回 json 对象的好方法,它确实让您、api 客户端和您的测试套件感到困惑。
你可能会从elegant-way-to-remove-fields-from-nested-dictionaries中得到一些启发。 .
您可以通过解析您的对象 jsoned 并按照逻辑删除字段来实现某些目标(根本不推荐)。
嵌套字典中的键/值操作示例:
import re
def dict_key_convertor(dictionary):
"""
Convert a dictionary from CamelCase to snake_case
:param dictionary: the dictionary given
:return: return a dict
"""
if not isinstance(dictionary, (dict, list)):
return dictionary
if isinstance(dictionary, list):
return [dict_key_convertor(elem) for elem in dictionary]
return {to_snake(key): dict_key_convertor(data) for key, data in dictionary.items()}
def to_snake(word) -> str:
"""
Convert all word from camel to snake case
:param word: the word given to be change from camelCase to snake_case
:return: return word variable in snake_case
"""
return re.sub(r'([A-Z]{2,}(?=[a-z]))', '\\1_', re.sub(r'([a-z])([A-Z]+)', '\\1_\\2', word)).lower()
通过一些工作,您可能会取得一些成就:
from typing import List
def dict_key_cleaner(dictionary):
if not isinstance(dictionary, (dict, list)):
return dictionary
if isinstance(dictionary, list):
return [dict_key_cleaner(elem) for elem in dictionary]
# change this return to work with dict
return {poper(key, dictionary): dict_key_cleaner(data) for key, data in dictionary.items()}
def poper(key, dictionary):
special_keys: List[str] = ["field_name","field_name1","field_name2"]
# do some stuff here
for spe_key in special_keys:
if key == spe_key and key.key_value is None:
dictionary.pop(key)
# add return of modified dict
关于python - 将特定的 pydantic 对象字段设置为 null 时不序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70287744/
我正在使用 Pydantic 为对象建模。如何使两个字段互斥? 例如,如果我有以下模型: class MyModel(pydantic.BaseModel): a: typing.Option
我正在使用 Pydantic 为对象建模。如何使两个字段互斥? 例如,如果我有以下模型: class MyModel(pydantic.BaseModel): a: typing.Option
在前面随笔《基于SqlAlchemy+Pydantic+FastApi的Python开发框架 》中介绍了框架总体的内容,其中主要的理念就是通过抽象接口的方式,实现代码的重用,提高开发效率。本
随着大环境的跨平台需求越来越多,对与开发环境和实际运行环境都有跨平台的需求,Python开发和部署上都是跨平台的,本篇随笔介绍基于SqlAlchemy+Pydantic+FastApi的Python开
下面代码来自官方FastAPI tutorials page ,我无法理解这些语句(例如,name: str)。 from typing import Optional from fastapi im
我在 Pydantic 中有一个嵌套模型。我在外部模型中有一个 root_validator 函数。我的印象是,如果调用外部根验证器,则内部模型有效。但显然不是。在下面的 MWE 中,我为内部模型提供
目前,我正在尝试为 Pandas 数据框创建一个 pydantic 模型。我想通过以下检查列是否唯一 import pandas as pd from typing import List from
我想将日期的 json 输入验证为 pydantic 类,接下来,简单地将文件注入(inject) Mongo。 带有日期类型的简单类 class CustomerBase(BaseModel):
我有以下模型 class Window(BaseModel): size: tuple[int, int] 我想像这样实例化它: fields = {'size': '1920x1080'}
我的问题很简单,令我惊讶的是到目前为止还没有人问过它: 我如何在 pydantic 中验证日期? 例如,我只想接受 1980.1.1-2000.1.1 范围内的日期。 最佳答案 validator d
是否可以为不可变 Pydantic Models 传递函数 setter ? . 例如: from uuid import uuid4, UUID from pydantic import BaseM
我正在尝试删除名字和姓氏字段以及电子邮件字段上的空格。我无法让它工作。 from pydantic import BaseModel, UUID4, SecretStr, EmailStr, cons
来自 pydantic docs我明白这一点: import pydantic class User(pydantic.BaseModel): id: int name: str cl
我试图将类中的一个字段限制为枚举。但是,当我尝试从类中获取字典时,它不会转换为字符串。相反,它保留了枚举。我查了 pydantic documentation ,但找不到与我的问题相关的任何内容。 这
我想根据特定条件动态分配字段数据类型。以下是我的模型: class Connection(BaseModel): name: str # type can be GCS or ORAC
我尝试按如下方式使用 Pydantic: from pydantic import BaseModel class A(BaseModel): prop1: str prop2: str cl
我遵循定义的 pydantic 模型。当我运行 p = IntOrStr(value=True) 时,我预计会失败,因为 True 是 bool 值,它应该会导致对 __int 和 __str cla
我遵循定义的 pydantic 模型。当我运行 p = IntOrStr(value=True) 时,我预计会失败,因为 True 是 bool 值,它应该会导致对 __int 和 __str cla
当我想使用 attr 库忽略某些字段时,我可以使用 repr=False 选项。 但是我在 pydantic 中找不到类似的选项 请看示例代码 import typing import attr fr
Pydantic 在将模型传递给另一个模型的构造函数时复制模型。这失败了: from pydantic import BaseModel class Child(BaseModel): pas
我是一名优秀的程序员,十分优秀!