zoukankan      html  css  js  c++  java
  • Django restframework 逻辑删除

    对象delete():调用的django.model.db.base 模块delete 方法

    queryset的delete调用的  django.db.models.query QuerySet类的delete方法:

     模型:

    class LogisticQuerySet(QuerySet):
        def delete(self):
            self.update(is_delete=True)
    
    class BookManager(models.Manager):
        _queryset_class = LogisticQuerySet
        def get_queryset(self):
            """
            Return a new QuerySet object. Subclasses can override this method to
            customize the behavior of the Manager.
            """
            return super().get_queryset().filter(is_delete=False)
    
    
    
    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")
        is_delete=models.BooleanField(default=False)
    
    
        class Meta:
            db_table="tbl_book"
    
        objects = BookManager()
        # def __str__(self):
        #     return self.book_name
        def delete(self, using=None, keep_parents=False):
            self.is_delete=True
            self.save()
    

    视图:

    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)
    
    
        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"})
    

      

    批量删除:

    book表:

    book_author表:

    测试逻辑删查:

    结果:

  • 相关阅读:
    django-form表单
    django-登录页面添加验证码
    opensatck误删除service项目
    运维脚本
    大数据平台架构组件选择与运用场景
    HDP2.4安装(五):集群及组件安装
    Spark(三): 安装与配置
    Spark(二): 内存管理
    Spark(一): 基本架构及原理
    ElasticSearch基本使用
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/14146104.html
Copyright © 2011-2022 走看看