字段顺序在模型中很重要,原因如下:
从v1.0开始,所有带有注释的字段(无论是仅注释还是带有默认值)都将位于所有没有注释的字段之前。在它们各自的组中,字段保持它们定义的顺序。
from pydantic import BaseModel, ValidationError class Model(BaseModel): a: int b = 2 c: int = 1 d = 0 e: float print(Model.__fields__.keys()) #> dict_keys(['a', 'c', 'e', 'b', 'd'])
于是可以看到a,c,e 注释的字段,在没有注释的字段b和d之前。
m = Model(e=2, a=1) print(m.dict()) #> {'a': 1, 'c': 1, 'e': 2.0, 'b': 2, 'd': 0}
实例化后也是按字段顺序打印对应的dict格式
校验失败的时候,报错字段顺序也是按字段顺序
try: Model(a='x', b='x', c='x', d='x', e='x') except ValidationError as e: error_locations = [e['loc'] for e in e.errors()] print(error_locations) #> [('a',), ('c',), ('e',), ('b',), ('d',)]