【问题标题】:Pydantic set attributes with a default function具有默认功能的 Pydantic 集属性
【发布时间】:2021-01-19 20:11:20
【问题描述】:

是否可以为不可变的Pydantic Models 传递函数设置器。

例如:

from uuid import uuid4, UUID
from pydantic import BaseModel
from datetime import datetime

def generate_uuid():
    return uuid4()

def get_datetimenow():
    return datetime.now()

class Item(BaseModel):

    class Config:
        allow_mutation = False
        extra = "forbid"

    id: UUID
    created_at: datetime

我希望 generate_uuidget_datetimenow 方法设置属性。

>>> Item()
ValidationError: 2 validation errors for Item
id
  field required (type=value_error.missing)
created_at
  field required (type=value_error.missing)

虽然我想要自动设置 idcreated_atItem 对象。与运行时相同的结果:

>>> Item(id=generate_uuid(), created_at=get_datetimenow())
Item(id=UUID('8f898730-3fad-4ca9-9667-c090f62a2954'), created_at=datetime.datetime(2021, 1, 19, 21, 13, 7, 58051))

【问题讨论】:

    标签: python pydantic


    【解决方案1】:

    您可以将Fielddefault_factory 参数与任意函数一起使用。像这样:

    from uuid import uuid4, UUID
    from pydantic import BaseModel, Field
    from datetime import datetime
    
    class Item(BaseModel):
    
        class Config:
            allow_mutation = False
            extra = "forbid"
    
        id: UUID = Field(default_factory=uuid4)
        created_at: datetime = Field(default_factory=datetime.now)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2022-06-26
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多