我希望允许用户使用PUT调用有选择地更新字段。关于化脓性模型,我让字段是可选的。在FastAPI处理程序中,如果模型属性为None,则不会给出字段,我也不会更新它。
这种方法的问题是,客户端无法“空出”某个特定类型不需要的字段。
特别是,我希望客户端能够通过在JSON中发送null来清除date字段。如何检测发送null的客户端与根本不发送字段/值的客户端之间的区别?在这两种情况下,模型属性都不是。
发布于 2021-02-16 19:46:15
脓性文献描述了两个可以与模型的.dict()
方法一起使用的选项。
exclude_unset
:在创建模型时未显式设置的字段是否应排除在返回的字典中;默认为False。在v1.0之前,exclude_unset被称为skip_defaults;现在不再推荐使用skip_defaultsexclude_defaults
:是否应从返回的字典中排除等于其默认值的字段(无论是set还是其他字段);默认为False因此,您可以创建具有可选字段的模型类:
from typing import Optional
from pydantic import BaseModel
class MyModel(BaseModel):
foo: Optional[int] = None
bar: Optional[int] = None
并且仍然生成一个dict,字段可以明确地设置为None,但是没有默认值:
baz = MyModel(foo=None)
assert baz.dict(exclude_unset=True) == {"foo": None}
baz = MyModel(bar=None)
assert baz.dict(exclude_unset=True) == {"bar": None}
发布于 2021-02-16 19:47:02
您可以检查obj.__fields_set__
,以确定该值是否丢失。
from typing import Optional
from pydantic import BaseModel
class Foo(BaseModel):
first: Optional[int] = None
second: Optional[int] = None
foo = Foo.parse_raw('{"first": null}')
assert foo.first is None and foo.second is None
assert foo.__fields_set__ == {"first"}
https://stackoverflow.com/questions/66229384
复制相似问题