我有一个简单的问题,我不确定处理它的最佳方法。我的架构定义如下:
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时如何忽略它?
答案 0 :(得分:2)
我现在想出来了。 cdonts答案很接近,但并不适合我。我仔细阅读了文档。 default
用于在序列化期间为缺失值提供默认值。
然而,我在反序列化和验证时间期间遇到了这个问题。也有参数。
allow_none
和missing
的组合在我的情况下非常有用并解决了我的问题。
答案 1 :(得分:0)
我认为你应该提供一个默认值。
class MySchema(Schema):
title = fields.String(required=True)
imageUrl = fields.Url(default=None)
希望它有所帮助!