Django 如何在APIView中使用两个序列化程序?
我有两个序列化程序。我想对POST请求使用HelloSerializer,对Get请求使用SchemaSerializer。在def get中,我想列出模型中的所有数据。我该怎么做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
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
)