我有一个简单的基于派丁语的模型

class ClassWithId(BaseModel):
    id: Optional[str] = Field(None, alias='_id')

那我就有了一个方法

def to_dict(self):
    data = self.dict(by_alias=True)
    return data

因此,对象中的"id"字段将被映射到字典的_id字段中,它工作得很好.

问题是--如何把行李拆开?我的意思是ClassWithId(**dict)来将字典中的_id字段映射到对象的id中?

推荐答案

您将需要允许您的模型通过Model Config按字段别名填充:

class ClassWithId(BaseModel):

    class Config:
        """Specific model configurations"""
        allow_population_by_field_name = True

    id: Optional[str] = Field(None, alias='_id')

现在,您可以在dict和Object之间来回切换:

my_obj = ClassWithId(id="abc")
my_dict = my_obj.dict(by_alias=True)

# Create a new object
my_obj_new = ClassWithId(**my_dict)
my_obj_new_2 = ClassWithId.parse_obj(my_dict)

# Make sure they're all equal
assert my_obj == my_obj_new == my_obj_new_2

我个人更喜欢Model.parse_obj() function,而不是动态地解包.但结果应该是平等的.

Python相关问答推荐

使用pandas MultiIndex进行不连续 Select

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

如何获取Django REST框架中序列化器内部的外卡属性?

从 struct 类型创建MultiPolygon对象,并使用Polars列出[list[f64]列

Tkinter -控制调色板的位置

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

无法通过python-jira访问jira工作日志(log)中的 comments

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

如何在Python中获取`Genericums`超级类型?

Django admin Csrf令牌未设置

网格基于1.Y轴与2.x轴显示在matplotlib中

寻找Regex模式返回与我当前函数类似的结果

python—telegraph—bot send_voice发送空文件

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

在Admin中显示从ManyToMany通过模型的筛选结果

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''