对象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表:

测试逻辑删查:

结果: