处理可选字段验证

los*_*rje 9 flask marshmallow

我有一个简单的问题,我不确定处理它的最佳方法。我有一个定义如下的模式:

class MySchema(Schema):
    title = fields.String(required=True)
    imageUrl = fields.Url()
Run Code Online (Sandbox Code Playgroud)

imageUrl是一个可选字段,有时它会是 None/null。如果发生这种情况,没关系,它不需要是有效的 url。但是当我这样做时:

my_schema.load(request.get_json())
Run Code Online (Sandbox Code Playgroud)

在 PUT 的传入数据上,url 字段记录错误: Field may not be null.

我认为partial=True在调用中使用 load 会起作用,但事实并非如此。我也不喜欢那样,因为这不是部分对象,而是完整对象,碰巧我的某些字段在数据库中可以为空。

我如何让棉花糖在 imageUrl 为非空时验证它,但在它为空时忽略它?

los*_*rje 19

我现在想通了。cdonts 的回答很接近,但对我不起作用。我仔细地重新阅读了文档。default用于在序列化期间为缺失值提供默认值。

但是,我在反序列化和验证期间遇到了这个问题。也有参数。

的组合allow_none,并missing在我的情况下有用,解决我的问题。

  • 这将有助于显示一些有关如何使用“allow_none”和“missing”的代码,并添加指向相关文档的链接。 (11认同)

小智 5

我赞成@lostdorje 的答案,因为它是正确的,代码示例如下:

class MySchema(Schema):
    field_1 = fields.Str(allow_none=True)
Run Code Online (Sandbox Code Playgroud)