我倾向于说这在你的尝试中是不可能的。
您正确地指出了
date
被称为
之后
习俗
validate_date
从您的数据模型。可以找到相关的源代码
here: pydantic.fields.py
(截至2019年1月,Git Hash:19320BF)。显然,
allow_none
-验证程序的级联不支持模式,请参阅
pydantic.Field._apply_validators
详情。更具体地说,从未测试过特定验证器的输出
None
,该测试在上游进行
Model.validate
.
从skim阅读文档和pydantic的来源来看,我倾向于说pydantic的验证机制目前对类型转换的支持非常有限。(
list -> date
,
list -> NoneType
)在验证函数中。如果您的用例有很好的参数,那么您可能希望请求该特性。
here
.
但是,后退一步,使用
alias
旗帜
allow_population_by_alias
(无论如何,这是不推荐的,如
documentation
)好像有点超载。
some_date
只需要作为
some_list[0] if len(some_list) >= 2 else None
但是它从来没有独立于
some_list
. 如果真是这样的话,为什么不选择下面简单得多的选项呢?
class Model(BaseModel):
some_list: List[date] = ...
@property
def some_date(self):
return None if len(self.some_list) < 2 else self.some_list[0]