gpt4 book ai didi

python - 如何验证pydantic模型的多个领域

转载 作者:行者123 更新时间:2023-12-04 12:19:36 38 4
gpt4 key购买 nike

我想验证pydantic模型的三个模型字段。为此,我正在从 pydantic 导入 root_validator。
低于错误。我在 https://pydantic-docs.helpmanual.io/usage/validators/#root-validators 中找到了这个.任何人都可以帮助我。找出下面的错误。
从 pydantic 导入 BaseModel、ValidationError、root_validator
回溯(最近一次调用最后一次):
文件“”,第 1 行,在
导入错误:无法从 'pydantic' 导入名称 'root_validator' (C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pydantic__init__.py)

我试过

@validator
def validate_all(cls,v,values,**kwargs):

我从一些常见的字段父模型继承了我的 pydantic 模型。仅显示父类字段的值,但不显示我的子类字段。例如
class Parent(BaseModel):
name: str
comments: str
class Customer(Parent):
address: str
phone: str

@validator
def validate_all(cls,v,values, **kwargs):
#here values showing only (name and comment) but not address and phone.

最佳答案

扩展 Rahul R 的答案,这个例子更详细地展示了如何使用 pydantic验证器。
此示例包含回答您的问题的所有必要信息。

import pydantic

class Parent(pydantic.BaseModel):
name: str
comments: str

class Customer(Parent):
address: str
phone: str

# If you want to apply the Validator to the fields "name", "comments", "address", "phone"
@pydantic.validator("name", "comments", "address", "phone")
@classmethod
def validate_all_fields_one_by_one(cls, field_value):
# Do the validation instead of printing
print(f"{cls}: Field value {field_value}")

return field_value # this is the value written to the class field

# if you want to validate to content of "phone" using the other fields of the Parent and Child class
@pydantic.validator("phone")
@classmethod
def validate_one_field_using_the_others(cls, field_value, values, field, config):
parent_class_name = values["name"]
parent_class_address = values["address"] # works because "address" is already validated once we validate "phone"
# Do the validation instead of printing
print(f"{field_value} is the {field.name} of {parent_class_name}")

return field_value

Customer(name="Peter", comments="Pydantic User", address="Home", phone="117")
输出
<class '__main__.Customer'>: Field value Peter
<class '__main__.Customer'>: Field value Pydantic User
<class '__main__.Customer'>: Field value Home
<class '__main__.Customer'>: Field value 117
117 is the phone number of Peter
Customer(name='Peter', comments='Pydantic User', address='Home', phone='117')
要更详细地回答您的问题:
将要验证的字段添加到 @validator装饰器直接位于验证函数上方。
  • @validator("name")使用字段值 "name" (例如 "Peter" )作为验证函数的输入。该类及其父类的所有字段都可以添加到@validator装饰器。
  • 验证函数 ( validate_all_fields_one_by_one ) 然后使用字段值作为第二个参数 ( field_value ) 来验证输入。验证函数的返回值写入类字段。验证函数的签名是def validate_something(cls, field_value)其中函数和变量名称可以任意选择(但第一个参数应该是 cls )。根据 Arjan ( https://youtu.be/Vj-iU-8_xLs?t=329 ),还有 @classmethod应该添加装饰器。

  • 如果目标是通过使用父类和子类的其他(已验证)字段来验证一个字段,则验证函数的完整签名为 def validate_something(cls, field_value, values, field, config) (参数名称 valuesfieldconfig 必须 匹配)其中可以使用字段名称作为键(例如 values["comments"])访问字段的值。

    关于python - 如何验证pydantic模型的多个领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61392633/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com