我想为我的PYDANIC模型自动生成一个ID字段,并且我不想允许调用者提供他们自己的ID值.我try 了使用Field函数的各种方法,但ID字段在初始值设定项中仍然是可选的.

class MyModel(BaseModel):
    item_id: str = Field(default_factory=id_generator, init_var=False, frozen=True)

我也try 使用PrivateAttr而不是Field,但当我呼叫model_dump时,ID字段不显示.

这似乎是一个非常常见和简单的用例,但我在文档中找不到任何关于如何实现这一点的内容.

推荐答案

使用PrivateAttr字段和computed_field属性的组合:

from uuid import uuid4
from pydantic import BaseModel, PrivateAttr, computed_field


class MyModel(BaseModel):
    _id: str = PrivateAttr(default_factory=lambda: str(uuid4()))

    @computed_field
    @property
    def item_id(self) -> str:
        return self._id


print(MyModel().model_dump())

Python相关问答推荐

用考克斯回归的生存分析系列的真值是模棱两可的.

盒子图分析

Django LoginView中的一个大问题

在Python中比较函数参数和回调函数的正确方法

PythonC扩展比Numba JIT快吗?

使用Python清除Excel中的内容

Django URL中不需要的空格

我很难用Python Pandas打开旧格式的XLS文件

通过np.interp的辅助x轴:如何更改xlims

用于将Custom TypeAlias替换为NotRequired的典型插件

大Pandas 成群结队,从Extrall捕获群

如何从数值数组中删除具有零方差的列?

使用Numba进行scipy fsolve,但得到错误

按组合多列的条件对数据帧进行排序

通过对最高维排序,然后对整个段重新排序来对n维数值数组进行排序

每隔一段时间捕捉到最近或上一个日期时间点值

搭载AMD图形处理器的Macbook加速版PyTorch

将islice应用于ijson,在应用时获得列表列表?

如何重新格式化一个大的CSV文件,每隔9行添加一个换行符

名单上没有任何相似之处吗?