我今天面临一个非常奇怪的问题.
这是我的序列化程序类.
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
我现在无法测试它,但它应该工作.