当many=True时,DRF序列化器跳过嵌套序列化器验证



我有一个序列化器,它引用了另一个具有many=True的序列化器。简化版:

class SerializerA(serializers.Serializer):
    id = serializers.CharField()
    quantity = serializers.IntegerField()
class SerializerB(serializers.Serializer):
    name = serializers.CharField()
    items = SerializerA(many=True, required=True)

当我获得没有指定项字段的数据时,serializer.is_valid()出于某种原因返回True。但如果'many'参数设置为False,则验证按预期工作。

为什么会这样?

我假设您正在尝试执行PUT或POST。在这种情况下,DRF不支持开箱即用的嵌套关系,如果字段items中没有任何内容,则validator返回true。如果您在items中有内容,它应该返回一个错误。

要使POST/PUT工作,您需要重写SerializerB的。create()和。update()方法。

最新更新