Pydantic constr vs Field args

9 浏览
0 Comments

Pydantic constr vs Field args

我想知道以下两种写法的区别:

from pydantic import BaseModel, Field
class Person(BaseModel):
    name: str = Field(..., min_length=1)

和:

from pydantic import BaseModel, constr
class Person(BaseModel):
    name: constr(min_length=1)

这两种写法似乎执行相同的验证(甚至在name为空字符串时引发完全相同的异常信息)。这只是代码风格的问题吗?其中一个比另一个更受推荐吗?

另外,如果我想将非空字符串列表作为属性包含在内,你认为哪种方法更好?:

from typing import List
from pydantic import BaseModel, constr
class Person(BaseModel):
    languages: List[constr(min_length=1)]

还是:

from typing import List    
from pydantic import BaseModel, Field
class Person(BaseModel):
    languages: List[str]
    @validator('languages', each_item=True)
    def check_nonempty_strings(cls, v):
        if not v:
            raise ValueError('Empty string is not a valid language.')
        return v

编辑:

值得一提的是,我正在使用这个用于一个FastAPI应用程序。

编辑2:

对于我的第二个问题,我认为第一个选择更好,因为它在模式中包含了长度要求(因此在文档中有所体现)。

0