gpt4 book ai didi

python - 有没有更好的方法来覆盖 Marshmallow.fields.List?

转载 作者:行者123 更新时间:2023-12-01 08:35:54 25 4
gpt4 key购买 nike

我创建了一个 NonEmptyList Marshmallow.fields.List 对象,以确保输入 JSON 列表至少有一个元素。这就是我所做的。

class NonEmptyList (fields.List):
def __init__ (self, *args, **kwargs):
kwargs['validate'] = Length(min=1)
super(NonEmptyList, self).__init__(*args, **kwargs)

这有一个问题,因为它会覆盖传递给对象的验证参数。因此,如果有人尝试将我的新 NonEmptyList 与他们自己的验证参数一起使用,它将不起作用。我尝试推送到我在代码中找到的私有(private)字段 _validators,但出现名称错误。另外,这不是一个有记录的字段,因此使用它并不是一个好主意。

使用:Python 3.6.7 和 marshmallow-3.0.0b19

最佳答案

我认为您最初的尝试非常接近正常工作。您只需要考虑传入 validate 关键字的可能性 - 此 kwarg 接受可调用验证器验证器集合。在这两种情况下,您需要确保不覆盖传递的对象,而只是将最小长度要求附加到其他要求(如果有)。

类似这样的事情:

class NonEmptyList(fields.List): 
def __init__ (self, *args, **kwargs):
validate = kwargs.pop("validate", [])
if callable(validate):
validate = [validate, Length(min=1)]
else:
validate = list(validate) + [Length(min=1)]
kwargs["validate"] = validate
super(NonEmptyList, self).__init__(*args, **kwargs)

演示:

>>> class LibrarySchema(Schema): 
... books = NonEmptyList(Str)
...
>>> LibrarySchema().load({"books": ["The Stinky Cheese Man and Other Fairly Stupid Tales"]})
{'books': ['The Stinky Cheese Man and Other Fairly Stupid Tales']}
>>> LibrarySchema().load({"books": []})
# ValidationError: {'books': ['Shorter than minimum length 1.']}

关于python - 有没有更好的方法来覆盖 Marshmallow.fields.List?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53729831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com