如何为 Pydantic 中组合的两个字段设置 max_length

How to set max_length for two fields combined in Pydantic

我知道对于单个字段,可以通过 constr 类似的方式完成:

class Email(BaseModel):
    local_part: EmailPartType[constr(max_length=255)]
    domain_part: EmailPartType[constr(max_length=255)]

但是如何将这两个字段combined设置为max_length呢?最终,我可以覆盖我的 __init__ 或我的自定义工厂来实现它。但我想知道 pydantic 中是否有更简洁的方法,这对我来说是一个新的(而且很好)东西。

您可以使用 root validator 来验证使用共同条件的多个字段:

from pydantic import constr, root_validator, BaseModel


class Email(BaseModel):
    local_part: str
    domain_part: str

    @root_validator
    def local_domain_len(cls, values):
        assert len(values['local_part']) + len(
            values['domain_part']) <= 255, 'Common local and domain length is greater than 255'
        return values