Moj*_*imi 5 python pydantic fastapi
我有一个 NewUser 模型,它是最终用户输入的内容,我想将该对象更新为 UserInDB,以便我可以将其传递给我的数据库引擎(DynamoDB,需要一个字典)
目前我打了.dict两次电话,这感觉不是正确的方法
from pydantic import BaseModel, Field
from datetime import datetime
from typing import Optional
from uuid import uuid4
class NewUser(BaseModel):
name: str
email: str
company_name: Optional[str]
class UserInDB(NewUser):
hash: str = Field(default_factory=uuid4)
range = 'DATA'
created_at: datetime = Field(default_factory=datetime.now)
#...
#Emulating what an end user would send
user = NewUser(name='Example', company_name='example', email='example@example.com')
#Is calling dict twice way to do it?
user_in_db = UserInDB(**user.dict()).dict()
db.create_user(user_in_db)
Run Code Online (Sandbox Code Playgroud)
您可以尝试定义 an__init__并且代码看起来会更好(至少对我来说)。
from pydantic import BaseModel, Field
from datetime import datetime
from typing import Optional
from uuid import uuid4
class NewUser(BaseModel):
name: str
email: str
company_name: Optional[str]
class UserInDB(NewUser):
hash: str = Field(default_factory= lambda: uuid4())
range = 'DATA'
created_at: datetime = Field(default_factory= lambda: datetime.now())
def __init__(self, user: NewUser):
super().__init__(**user.dict())
#...
# Emulating what an end user would send
user = NewUser(name='Example', company_name='example', email='example@example.com')
# This looks probably better
user_in_db = UserInDB(user)
Run Code Online (Sandbox Code Playgroud)