• django restframework 多对多模型


    1。模型 图书和作者是多对多关系

    class Book(models.Model):
        book_name=models.CharField(max_length=40)
        price=models.DecimalField(max_digits=4,decimal_places=2)
        publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE,related_name="publish")
        author=models.ManyToManyField(to="Author",related_name="author")
    
        class Meta:
            db_table="tbl_book"
    
        # def __str__(self):
        #     return self.book_name
    
    class Publish(models.Model):
        publish_name=models.CharField(max_length=20)
        address=models.CharField(max_length=30)
    
        class Meta:
            db_table="tbl_publish"
        # def __str__(self):
        #     return self.publish_name
    
    class Author(models.Model):
        sex_choices=[(0,"男"),(1,"女")]
        name=models.CharField(max_length=20,unique=True)
        phone=models.BigIntegerField()
        sex=models.IntegerField(choices=sex_choices)
    
        class Meta:
            db_table="tbl_author"
    
        # def __str__(self):
        #     return self.name
    

     

    序列化器:

    class SerBook(serializers.ModelSerializer):
        """  add(1) add(1,2), set(list_object), remove(1), remove(1,2) or remove(*[1,2])"""
        #publish = serializers.PrimaryKeyRelatedField(queryset=Publish.objects.all())
        #author = serializers.PrimaryKeyRelatedField(allow_empty=False, many=True, queryset=Author.objects.all())
        class Meta:
            model=Book
            fields="__all__"
    
    
    class  SerPublish(serializers.ModelSerializer):
        class Meta:
            model = Publish
            fields = "__all__"
    
    class  SerAuthor(serializers.ModelSerializer):
        class Meta:
            model = Author
            fields = "__all__"
    

     

    视图以图书为例:

    class BookView(APIView):
    
    
        def get(self,request,*args,**kwargs):
    
            pk= kwargs.get("id")
            if pk :
                inst = Book.objects.filter(id=kwargs.get("id")).first()
                if inst:
                    ser = SerBook(instance=inst, many=False)
                    return Response(data=ser.data, status=200)
                else:
                    return Response(data={"msg": "not found", "data": []}, status=200)
            else:
                inst = Book.objects.all()
                ser = SerBook(instance=inst, many=True)
                return Response(data=ser.data, status=200)
    
    
        def post(self,request,*args,**kwargs):
            data=request.data
            many=False
            if isinstance(data,list):
              many=True
            ser = SerBook(data=data, many=many)
            if ser.is_valid():
                ser.save()
                return Response(data=ser.data, status=status.HTTP_200_OK)
            else:
                return Response(data=ser.errors, status=status.HTTP_404_NOT_FOUND)
    
    
        def put(self,request,*args,**kwargs):
             data=request.data
             pk=kwargs.get("id")
             if pk :
                inst=Book.objects.filter(id=pk).first()
                print(Book.objects.filter(id=pk).values().first(),"xxxx")
                if inst:
                    ser = SerBook(instance=inst, many=False,data=data
                                  )
                    if ser.is_valid():
                        ser.save()
                    return Response(data=ser.data, status=200)
      
      

     

     序列化器结构:

    postman测试:

    创建单个图书:

    PUT  修改图书根据图书book  id:

    多对多删除:

        def delete(self,request,*args,**kwargs):
            pk= kwargs.get("id")
            data=request.data
            if pk:
                inst=Book.objects.filter(id=pk).first()
                if inst:
                    inst.delete()
                    return Response(data={"code":200,"msg":"删除ok"})
                else: return Response(data={"code":404,"msg":"删除失败,不存在!"})
            else:
                ids=data.get("ids")
                if isinstance(ids,list):
                    objs=Book.objects.filter(id__in=ids)
                    objs.delete()
                    return Response(data={"code":200,"msg":"删除ok"})
    

     批量删除:

     

  • 相关阅读:
    POJ1475【推箱子】(双bfs)
    CH2101:【可达性统计】(拓扑排序+状态压缩)
    拓扑排序模板
    BZOJ 2288: 【POJ Challenge】生日礼物 优先队列+贪心+链表
    Play Framework 完整实现一个APP(六)
    Play Framework 完整实现一个APP(五)
    Play Framework 完整实现一个APP(四)
    Play Framework 完整实现一个APP(三)
    Play Framework 完整实现一个APP(二)
    Play Framework 完整实现一个APP(一)
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/14140900.html
Copyright © 2020-2023  润新知