【发布时间】:2021-03-03 17:21:28
【问题描述】:
如果未提供电子邮件,我想设置默认电子邮件, 即:
name = a
last_name = b
email = None
电子邮件将变为“a_b@email.com”
我尝试了类似的方法,但显然不能作为 name,last_name 不在函数中定义。
class User(BaseModel):
name: Optional[str] = ''
last_name: Optional[str] = ''
email: EmailStr
@validator('email')
def set_email(cls, email):
if not email:
return name + last_name + '@email.com'
else:
return email
更新 - 仍然无法正常工作, 我试过了:
@root_validator(pre=True)
def email_set_config(cls, values):
email, name ,last_name = values.get('email'), values.get('name') , values.get('last_name')
if email is None :
email= name + '_' + name + '@' + last_name
return values
解决方案:
添加到类:
--更新
- 实际上它在没有定义类 Config 的情况下工作:
class Config:
validate_assignment = True
@validator('email')
def set_email(cls, v, values, **kwargs):
return email or values["name"] + '_' + values["name"] + '@' + ["last_name"]
【问题讨论】:
-
尝试使用@root_validator
-
@NobbyNobbs - 感谢您的建议,不工作,更新后。
-
实际上它可以工作,您不会在实现中更新值字典,而是设置局部变量。只需修复它:)
-
@NobbyNobbs - 想通了,我在帖子中更新了解决方案,你能解释一下什么时候需要 root_validator 吗?