Python 在棉花糖中使用带allow_blank的嵌套架构

Python 在棉花糖中使用带allow_blank的嵌套架构,python,validation,nested,marshmallow,Python,Validation,Nested,Marshmallow,我遇到了一个问题,我希望有人能给我指出正确的方向。 我想使用marshmallow来验证具有嵌套模式的结构。 以下是一个例子: from marshmallow import Schema, fields class userAddress(Schema): street = fields.Str(required=True) city = fields.Str(required=False) zipcode = fields.Int(required=True)

我遇到了一个问题,我希望有人能给我指出正确的方向。 我想使用marshmallow来验证具有嵌套模式的结构。 以下是一个例子:

from marshmallow import Schema, fields
class userAddress(Schema):
    street = fields.Str(required=True)
    city = fields.Str(required=False)
    zipcode = fields.Int(required=True)
    

class user(Schema):
    name = fields.Str(required=True)
    address = fields.Nested(userAddress, required=False, allow_none=True, allow_blank=True)

user_instance = user()

user_data1 = {
    "name": "John Doe",
    "address": {
        "street": "Road to nowhere",
        "city": "St. Elsewhere",
        "zipcode": 666
    }
}

user_data2 = {
    "name": "John Doe, Jr.",
    "address": {}
}
我想实现的是,两个用户数据指令都可以毫无问题地进行验证。如果键
地址
存在,则相应的字典应与模式
用户地址
中的定义相匹配。但如果键
地址
不存在或值为空字典,则可以接受

但这不起作用,结果如下:

>>> user_instance.validate(user_data1)
{}
>>> user_instance.validate(user_data2)
{'address': {'zipcode': ['Missing data for required field.'], 'street': ['Missing data for required field.']}}
>>>
不接受用户_data2中
地址
的空字典

我试图在
validate
中使用
partial=True
,但随后也接受了缺少的
name

尝试fields.Raw()而不是Nested()

尝试fields.Raw()而不是Nested()


你好,鲁塔。谢谢你的回复。但是,我在尝试您的版本时收到一条错误消息
address=fields.Raw(userAddress,required=False,allow\u none=True)
TypeError:\uuuu init\uuuu()接受1个位置参数,但提供了2个位置参数(以及2个仅限关键字的参数)
Hi Ruta。谢谢你的回复。但是,我在尝试您的版本时收到一条错误消息
address=fields.Raw(userAddress,required=False,allow\u none=True)
TypeError:\uuuu init\uuuu()接受1个位置参数,但提供了2个位置参数(以及2个仅限关键字的参数)
from marshmallow import Schema, fields
class userAddress(Schema):
    street = fields.Str(required=True)
    city = fields.Str(required=False)
    zipcode = fields.Int(required=True)
    

class user(Schema):
    name = fields.Str(required=True)
    address = fields.Raw(userAddress)

user_instance = user()

user_data1 = {
    "name": "John Doe",
    "address": {
        "street": "Road to nowhere",
        "city": "St. Elsewhere",
        "zipcode": 666
    }
}

user_data2 = {
    "name": "John Doe, Jr.",
    "address": {}
}