处理可选字段验证

handling optional field validation

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

class MySchema(Schema):
    title = fields.String(required=True)
    imageUrl = fields.Url()

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

my_schema.load(request.get_json())

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

我认为在加载调用中使用 partial=True 会起作用,但事实并非如此。我也不喜欢这样,因为这不是部分对象,它是完整对象,恰好我的一些字段在数据库中可以为空。

如何让 marshmallow 在 imageUrl 非空时验证它,但在它为空时忽略它?

我认为你应该提供一个默认值。

class MySchema(Schema):
    title = fields.String(required=True)
    imageUrl = fields.Url(default=None)

希望对您有所帮助!

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

然而,在 反序列化和验证 期间,我 运行 陷入了这个问题。也有参数。

allow_nonemissing 的组合对我的情况很有用,解决了我的问题。