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}}
浙公网安备 33010602011771号