serializer.ModelSerializer 的学习

#这里是serialize· VIEW视图模块的代码
class BookView(APIView):
    def get(self,request):
        queryset = Book.objects.all()
        serializer_class =BookSerializer
        serializer_obj = serializer_class(queryset,many=True)
        return Response(serializer_obj.data)

    def post(self,request):
        serializer_obj= BookSerializer(data=request.data)
        if serializer_obj.is_valid():
            serializer_obj.save()
            return Response(serializer_obj.data)
        else:
            return Response(serializer_obj.errors)

class BookEditView(APIView):
    def get(self,request,id):

        queryset_obj = Book.objects.filter(id=id).first()

        serializer_obj = BookSerializer(queryset_obj)

        return Response(serializer_obj.data)

    def put(self,request,id):
        query_obj = Book.objects.filter(id=id).first()
        serializer_obj = BookSerializer(query_obj,data=request.data,partial=True)
        if serializer_obj.is_valid():
            serializer_obj.save()
            return Response(serializer_obj.data)
        else:
            return Response(serializer_obj.errors)

    def delete(self,request,id):
        obj = Book.objects.filter(id=id).first()
        obj.delete()
        return Response("")

#这里是序列化,我们自己写的Serializer_class,继承serializers.ModelsSerializer

#这里我们要注意models模块中的Book_class包含的modles.ChoiceField(),modles.ForeignKeyField(),models.ManyToMany()字段,这些我们要特殊处理

#serializers.CharField


1
class BookSerializer(serializers.ModelSerializer): 2 category_info = serializers.CharField(source="get_category_display",read_only=True) 3 def get_category_info(self,obj): 4 return obj.get_category_display() 5 publisher_info = serializers.SerializerMethodField(read_only=True) 6 def get_publisher_info(self,obj): 7 return {"title":obj.title} 8 9 author_info = serializers.SerializerMethodField(read_only=True) 10 def get_author_info(self,obj): 11 obj_list = obj.author.all() 12 return [{"name":obj.name} for obj in obj_list ] 13 14 class Meta: 15 model = Book 16 fields = "__all__" 17 extra_kwargs = {'category': {'write_only': True}, 18 'publisher': {'write_only': True},'author': {'write_only': True}}

 

posted @ 2020-11-23 17:48  fufu1  阅读(107)  评论(0)    收藏  举报