首页 > 解决方案 > django rest 框架序列化器允许额外的字段

问题描述

我正在为视图创建一个序列化程序。它不是 ModelSerializer。此序列化程序包含要在请求中发送的可能字段。我注意到在请求中我可以发送未出现在序列化程序中的字段,并且它通过了序列化程序验证。

例如,这个序列化器:

class MySerializer(serializers.Serializer):
    days = serializers.IntegerField(required=False)
    users_list = serializers.ListField(child=serializers.CharField(), required=False)

    class Meta:

        fields = [
            'days',
            'users_list'
        ]

在视图中我这样做:

class UserValuesViewSet(viewsets.ModelViewSet):
    serializer_class = MySerializer
    
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        return Response(status=status.HTTP_201_CREATED)

我可以看到调用了序列化程序,并且当发送错误的值类型时,我确实得到了一个异常,但是当发送没有出现在序列化程序“字段”中的字段时,它也通过了验证。

例如:

data = {
        'days': '7',
        'users_list': ['1234', '123456'],
        'some_key': 'some_value'
    }

如何强制从序列化程序发送可能的字段?

标签: pythondjangoserializationdjango-rest-framework

解决方案


推荐阅读