处理可选字段验证

时间:2016-01-09 06:14:40

标签: flask marshmallow

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

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

imageUrl是一个可选字段,有时它将是None / null。如果发生这种情况,那就没关系,并且它不需要是有效的网址。但我在做的时候:

my_schema.load(request.get_json())

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

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

如果imageUrl为非null,我如何让marshmallow验证imageUrl,但是当它为null时如何忽略它?

2 个答案:

答案 0 :(得分:2)

我现在想出来了。 cdonts答案很接近,但并不适合我。我仔细阅读了文档。 default用于在序列化期间为缺失值提供默认值。

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

allow_nonemissing的组合在我的情况下非常有用并解决了我的问题。

答案 1 :(得分:0)

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

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

希望它有所帮助!