ModelSerializer 高级使用 (3)

   多条操作,你需要放入请求body中,以[]形式进行传递。

from rest_framework.generics import GenericAPIView from rest_framework.mixins import CreateModelMixin,ListModelMixin,RetrieveModelMixin,UpdateModelMixin from rest_framework.response import Response from app01.serializer import * from app01.models import * class BookAPI(GenericAPIView,CreateModelMixin,ListModelMixin,RetrieveModelMixin,UpdateModelMixin): queryset = Book.objects.filter(delete_status=False) # 查询未删除的数据 serializer_class = BookModelSerializer def get(self,request,*args,**kwargs): pk = kwargs.get("pk") if not pk: # 获取所有 return self.list(request) # 获取单条 return self.retrieve(request,pk) def post(self,request,*args,**kwargs): # 新增一条 if isinstance(request.data,dict): return self.create(request) # 自动返回 # 新增多条 elif isinstance(request.data,list): # 现在执行我们自己定义的ListSerializer,因为传入many=True.由于继承原生的ListSerializer,它自己有create方法 book_ser = self.get_serializer(data=request.data,many=True) book_ser.is_valid(raise_exception=True) # 序列化失败直接抛出异常 book_ser.save() return Response(data=book_ser.data) def patch(self, request, *args, **kwargs): pk = kwargs.get("pk") if not pk: return self.update(request,pk) # 改多个 # 前端传递数据格式[{book_id:1,book_name:xx,book_price:xx},{book_id:1,book_name:xx,book_price:xx}] # 处理传入的数据 对象列表[book1,book2] 修改的数据列表[{book_name:xx,book_price:xx},{book_name:xx,book_price:xx}] book_list = [] modify_data = [] for item in request.data: # {book_id:1,book_name:xx,book_price:xx} 取出pk,不允许修改pk pk = item.pop("book_id") book_obj = models.Book.objects.get(pk=pk) book_list.append(book_obj) modify_data.append(item) book_ser = BookModelSerializer(instance=book_list,data=modify_data,many=True,partial=True) # parital允许局部修改,这个主要针对put,patch本身就是True # 处理时: # self.child.update(instance[i],attrs) for i,attrs in enumerate(validated_data) 传入id,和要修改的数据 book_ser.is_valid(raise_exception=True) book_ser.save() return Response(book_ser.data) def delete(self,request,*args,**kwargs): pk = kwargs.get("pk") pks = [] # 用于获取要删除的id,全部放入列表中 if pk: # 删一个 pks.append(pk) else: pks = request.data.get("pks") result = models.Book.objects.filter(pk__in=pks,delete_status=False).update(delete_status=True) if result: return Response(data="删除%s条记录成功"%len(pks)) else: return Response(data="删除失败,没有要删除的数据") 数据格式

   新增数据:

# 新增一条 :8000/api/books/ POST请求 # 请求的数据格式: { "book_name":"新书,单条", "book_price": "123.00", "publish": 1, "authors": [ 1,2 ] } # 返回格式: { "pk": 12, "book_name": "新书,单条", "book_price": "123.00", "publish_name": "北京出版社", "author_list": [ { "author_name": "云崖", "author_gender": "男" }, { "author_name": "小屁孩", "author_gender": "女" } ] } # 新增多条 :8000/api/books/ POST请求 # 请求的数据格式: [ { "book_name":"新书1,多条", "book_price": "88.00", "publish": 1, "authors": [ 1 ] }, { "book_name":"新书2,多条", "book_price": "13.00", "publish": 1, "authors": [ 2,3 ] }, { "book_name":"新书3,多条", "book_price": "63.00", "publish": 1, "authors": [ 3,4 ] } ] # 返回格式: [ { "pk": 18, "book_name": "新书1,多条", "book_price": "88.00", "publish_name": "北京出版社", "author_list": [ { "author_name": "云崖", "author_gender": "男" } ] }, { "pk": 19, "book_name": "新书2,多条", "book_price": "13.00", "publish_name": "北京出版社", "author_list": [ { "author_name": "小屁孩", "author_gender": "女" }, { "author_name": "东仙人", "author_gender": "男" } ] }, { "pk": 20, "book_name": "新书3,多条", "book_price": "63.00", "publish_name": "北京出版社", "author_list": [ { "author_name": "东仙人", "author_gender": "男" }, { "author_name": "云散人", "author_gender": "女" } ] } ]

   修改数据:

# 修改一条 :8000/api/books/1/ patch请求 # 请求的数据格式: { "book_name":"修改新书", "book_price": "123.00", "publish": 3, "authors": [ 2,3 ] } # 返回格式: { "pk": 1, "book_name": "修改新书", "book_price": "123.00", "publish_name": "西京出版社", "author_list": [ { "author_name": "小屁孩", "author_gender": "女" }, { "author_name": "东仙人", "author_gender": "男" } ] } # 修改多条 :8000/api/books/ patch请求 # 请求的数据格式: [ { "pk": 1, "book_name":"修改新书", "book_price": "123.00", "publish": 1, "authors": [ 3,4 ] }, { "pk": 2, "book_name":"修改新书2", "book_price": "123.00", "publish": 1, "authors": [ 1,2 ] } ] # 返回格式: [ { "pk": 1, "book_name": "修改新书", "book_price": "123.00", "publish_name": "北京出版社", "author_list": [ { "author_name": "东仙人", "author_gender": "男" }, { "author_name": "云散人", "author_gender": "女" } ] }, { "pk": 2, "book_name": "修改新书2", "book_price": "123.00", "publish_name": "北京出版社", "author_list": [ { "author_name": "云崖", "author_gender": "男" }, { "author_name": "小屁孩", "author_gender": "女" } ] } ]

   删除数据:

# 删除一条 :8000/api/books/1/ delete请求 # 删除多条 :8000/api/books/ delete请求 # 请求数据格式: { "pks": [1,2,3] }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxdzx.html