Marshmallow 允许为一个值保留 none,但不清除该值
Marshmallow allow retaining none for a value, but not clearing the value
我想强制用户群中的用户设置一个以前不需要但现在需要的值。
这是设置
从数据库中获取的用户根据数据库绑定的棉花糖模式进行验证,这允许 None 值。
country = fields.String(validate=OneOf(COUNTRY_CODES), allow_none=True)
新用户根据不允许 None 的棉花糖模式进行验证。
country = fields.String(validate=OneOf(COUNTRY_CODES), allow_none=False)
已编辑的用户根据另一个棉花糖模式进行验证,这是棘手的部分。
我希望这个字段不设置就好了,如果之前没有设置,但是一旦设置了,你应该就不能删除了。
这在棉花糖中是如何指定的?
我可能误解了你的问题,但在我看来,用户是新用户还是现有用户,是架构外部的状态(因为架构是无状态的),因此,它需要传递给验证器。在与你类似的情况下,我做了这样的事情:
from marshmallow import fields, validates_schema, Schema
from marshmallow.validate import OneOf
from marshmallow.exceptions import ValidationError
class Foo(Schema):
country = fields.String(validate=OneOf(('A', 'B')), missing=None)
# Some sort of hint that indicates if it's a new
# user or not. Could be record creation date, etc.
new_user = fields.Boolean(missing=False)
@validates_schema
def check_country(self, instance):
if instance['new_user'] and instance['country'] is None:
raise ValidationError("count can not be none")
观察:
schema = Foo()
schema.load({})
>>> UnmarshalResult(data={'new_user': False, 'country': None}, errors={})
schema.load({'new_user':True})
>>> UnmarshalResult(data={'new_user': True, 'country': None}, errors={'_schema': ['count can not be none']})
schema.load({'new_user':True, 'country': 'A'})
>>> UnmarshalResult(data={'new_user': True, 'country': 'A'}, errors={})
schema.load({'new_user':False})
>>> UnmarshalResult(data={'new_user': False, 'country': None}, errors={})
我想强制用户群中的用户设置一个以前不需要但现在需要的值。
这是设置
从数据库中获取的用户根据数据库绑定的棉花糖模式进行验证,这允许 None 值。
country = fields.String(validate=OneOf(COUNTRY_CODES), allow_none=True)
新用户根据不允许 None 的棉花糖模式进行验证。
country = fields.String(validate=OneOf(COUNTRY_CODES), allow_none=False)
已编辑的用户根据另一个棉花糖模式进行验证,这是棘手的部分。
我希望这个字段不设置就好了,如果之前没有设置,但是一旦设置了,你应该就不能删除了。
这在棉花糖中是如何指定的?
我可能误解了你的问题,但在我看来,用户是新用户还是现有用户,是架构外部的状态(因为架构是无状态的),因此,它需要传递给验证器。在与你类似的情况下,我做了这样的事情:
from marshmallow import fields, validates_schema, Schema
from marshmallow.validate import OneOf
from marshmallow.exceptions import ValidationError
class Foo(Schema):
country = fields.String(validate=OneOf(('A', 'B')), missing=None)
# Some sort of hint that indicates if it's a new
# user or not. Could be record creation date, etc.
new_user = fields.Boolean(missing=False)
@validates_schema
def check_country(self, instance):
if instance['new_user'] and instance['country'] is None:
raise ValidationError("count can not be none")
观察:
schema = Foo()
schema.load({})
>>> UnmarshalResult(data={'new_user': False, 'country': None}, errors={})
schema.load({'new_user':True})
>>> UnmarshalResult(data={'new_user': True, 'country': None}, errors={'_schema': ['count can not be none']})
schema.load({'new_user':True, 'country': 'A'})
>>> UnmarshalResult(data={'new_user': True, 'country': 'A'}, errors={})
schema.load({'new_user':False})
>>> UnmarshalResult(data={'new_user': False, 'country': None}, errors={})