Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DjangoRestFramework未验证required=True_Python_Django_Django Rest Framework - Fatal编程技术网

Python DjangoRestFramework未验证required=True

Python DjangoRestFramework未验证required=True,python,django,django-rest-framework,Python,Django,Django Rest Framework,我今天面临一个非常奇怪的问题 这是我的序列化程序类 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.Seriali

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

这是我的序列化程序类

 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

我现在无法测试它,但它应该可以工作。

如果它只返回经过验证的数据,为什么要定义
create
方法?顺便问一下,您是如何创建记录的?如果你想返回一个拓扑对象(实例),你需要用
返回拓扑(**validated_data)
实例化一个,或者用django的
返回拓扑.objects.create(**validated_data)
@pynshia我正在使用DRF验证json