微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用键入的可选值创建动态Pydantic模型

如何解决使用键入的可选值创建动态Pydantic模型

我想从数据中创建动态模型,从中创建JSON,然后将其加载到其他位置。

我找不到一种以某种方式定义字段的方法,该方法应该是可选的,但是当该字段存在数据时,它将被验证。

这是必填字段: fields[col_name] = (data_type,None)

# resolve types for data
data_type = resolve_type(data)
required = is_required(data)
if required:
  fields[col_name] = (data_type,...)
else:
  fields[col_name] = (data_type,None) <--- unclear

...

pydantic.create_model(name,**fields)

以上配置生成了JSON模型,该模型使字段成为可选字段并进行了输入,但是随后我使用无法传递None值-'$.inputs.0.Field','message': "None is not of type 'string'"

的输入数据进行验证

所以我的问题-如何声明将验证输入的字段,但仅当它不是None时才如此。 这样,我就可以创建JSON模式并将其加载到另一个位置。

解决方法

根据https://github.com/samuelcolvin/pydantic/issues/990

中的建议实施的解决方法
optional_fields = list()
if required:
  fields[col_name] = (data_type,...)
else:
  fields[col_name] = (data_type,None)
  optional_fields.append(col_name)

model = pydantic.create_model(name,**fields)

def schema_extra(schema,model):
    for column in optional_fields:
        original_type = schema["properties"][column]["type"]
        schema["properties"][column].update({"type": ["null",original_type]})

model.__config__.schema_extra = schema_extra

schema_json = model.schema_json()
,
f = baz()

这是您想要的结果吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。