Pydantic 使用默认函数设置属性
Pydantic set attributes with a default function
是否可以为不可变 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_uuid
和 get_datetimenow
来设置属性。
>>> Item()
ValidationError: 2 validation errors for Item
id
field required (type=value_error.missing)
created_at
field required (type=value_error.missing)
虽然我想获得一个自动设置 id
和 created_at
的 Item
对象。与 运行:
相同的结果
>>> 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))
您可以将 Field
的 default_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)
是否可以为不可变 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_uuid
和 get_datetimenow
来设置属性。
>>> Item()
ValidationError: 2 validation errors for Item
id
field required (type=value_error.missing)
created_at
field required (type=value_error.missing)
虽然我想获得一个自动设置 id
和 created_at
的 Item
对象。与 运行:
>>> 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))
您可以将 Field
的 default_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)