python – DjangoRestFramework未验证required = True

我今天面临一个非常奇怪的问题.

这是我的序列化程序类.

 class Connectivity(serializers.Serializer):

    device_type = serializers.CharField(max_length=100,required=True)
    device_name = serializers.CharField(max_length=100,required=True)

class Connections(serializers.Serializer):

    device_name = serializers.CharField(max_length=100,required=True)
    connectivity = Connectivity(required = True, many = True)


class Topologyserializer(serializers.Serializer):

    name = serializers.CharField(max_length=100,required=True, \
                                  validators=[UniqueValidator(queryset=Topology.objects.all())])
    json = Connections(required=True,many=True)

    def create(self, validated_data):
        return validated_data

我从Django视图调用Topologyserializer,我传递一个json,如:

{

    "name":"tokpwol",
    "json": [

    ]
}

根据我对DRF的经验,因为我在json字段中提到了required = True,所以不应该接受上面的json.

但我能够创造记录.
任何人都可以建议我为什么它不验证json字段以及它如何接受空列表作为json字段?

我正在使用django rest framework 3.0.3

最佳答案 DRF没有明确说明列表所需的内容.

在其代码中,只要提供了值,验证就会传递,即使该值是空列表也是如此.

如果要确保列表不为空,则需要手动验证其内容.您可以通过在TopologySerializer上添加以下方法来实现:

def validate_json(self, value):
    if not value:
        raise serializers.ValidationError("Connections list is empty")
    return value

我现在无法测试它,但它应该工作.

点赞