对象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表:
测试逻辑删查:
结果: