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
Django 如何在APIView中使用两个序列化程序?_Django_Django Models_Django Rest Framework_Django Views - Fatal编程技术网

Django 如何在APIView中使用两个序列化程序?

Django 如何在APIView中使用两个序列化程序?,django,django-models,django-rest-framework,django-views,Django,Django Models,Django Rest Framework,Django Views,我有两个序列化程序。我想对POST请求使用HelloSerializer,对Get请求使用SchemaSerializer。在def get中,我想列出模型中的所有数据。我该怎么做 class SchemaSerializer(serializers.ModelSerializer): """Serializes Schema""" class Meta: model = models.Schema fields = ( 'id', 'name

我有两个序列化程序。我想对POST请求使用HelloSerializer,对Get请求使用SchemaSerializer。在def get中,我想列出模型中的所有数据。我该怎么做

class SchemaSerializer(serializers.ModelSerializer):
    """Serializes Schema"""

    class Meta:
        model = models.Schema
        fields = (  'id', 'name', 'version')


class HelloSerializer(serializers.Serializer):
    name = serializers.CharField()
my Views.py:

class HelloApiView(APIView):
    """Test API View"""
    serializer_class = serializers.HelloSerializer

    def get()

    def post(self, request):
        """Create a hello message with our name"""
        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            name = serializer.validated_data.get('name')
            message = f'Hello {name}!'
            return Response({'message': message})
        else:
            return Response(
                serializer.errors,
                status=status.HTTP_400_BAD_REQUEST
            )
我的模特

class Schema(models.Model):
    """Database model for Schema """
    name= models.TextField()
    version = models.TextField()

    def __str__(self):
        return self.name

这非常简单,只需覆盖
get\u serializer\u class
方法,根据请求方法返回序列化器类

class HelloApiView(APIView):

    def get_serializer_class(self):
        if self.request.method.lower() == "get":
            return MyApiControllerGetSerializer 
        else:
            return MyApiControllerSerializer   

像这样使用
get\u serializer\u class
函数

class HelloApiView(APIView):
    """Test API View"""
    serializer_class = serializers.HelloSerializer

    def get_serializer_class(self):
        if self.request.method == 'POST':
           return YOUR_SERIALIZER_1
        elif self.request.method == 'GET':
           return YOUR_SERIALIZER_2
        else:
            return YOUR_DEFAULT_SERIALIZER

    def get()

    def post(self, request):
        """Create a hello message with our name"""
        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            name = serializer.validated_data.get('name')
            message = f'Hello {name}!'
            return Response({'message': message})
        else:
            return Response(
                serializer.errors,
                status=status.HTTP_400_BAD_REQUEST
            )