模型:

class LogisticQuerySet(QuerySet):

def delete(self):

self.update(is_delete=True)

class BookManager(models.Manager):

_queryset_class = LogisticQuerySet

def get_queryset(self):

"""

# todo 重写查询类 过滤is_delete=False

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 Publish(models.Model):

publish_name=models.CharField(max_length=20)

address=models.CharField(max_length=30)

is_delete = models.BooleanField(default=False)

class Meta:

db_table="tbl_publish"

# def __str__(self):

# return self.publish_name

def delete(self, using=None, keep_parents=False):

self.is_delete=True

self.save()

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)

is_delete = models.BooleanField(default=False)

class Meta:

db_table="tbl_author"

# def __str__(self):

# return self.name

def delete(self, using=None, keep_parents=False):

self.is_delete=True

self.save()

以上是模型删除对象删除重写和查询集合的删除重写,

序列化器:

class SerBookList(serializers.ListSerializer):

def update(self, queryset_list, validated_data_list):

queryset=[]

for index, validated_data in enumerate(validated_data_list):

inst=self.child.update(queryset_list[index], validated_data)

queryset.append(inst)

return queryset

def validate(self, attrs):

if not attrs:

raise serializers.ValidationError("数组不能为空")

return attrs

class SerBook(serializers.ModelSerializer):

""" add(1) add(1,2), set(list_object), remove(1), remove(1,2) or remove(*[1,2])"""

class Meta:

model=Book

fields="__all__"

list_serializer_class = SerBookList

class SerPublish(serializers.ModelSerializer):

class Meta:

model = Publish

fields = "__all__"

class SerAuthor(serializers.ModelSerializer):

class Meta:

model = Author

fields = "__all__"

视图:

class BookView(APIView):

"""https://www.cnblogs.com/zx125/articles/11985347.html"""

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 and isinstance(data,dict):

inst=Book.objects.filter(id=pk).first()

if inst:

ser = SerBook(instance=inst, many=False,data=data

)

if ser.is_valid():

ser.save()

return Response(data=ser.data, status=200)

else:

return Response(data={"msg":"not found 404","data":[],"code":200},status=200)

elif isinstance(data,list):

try:

ids=[inst.pop("id") for inst in data]

queryset=Book.objects.filter(id__in=ids)

serializer=SerBook(instance=queryset,many=True,data=data)

if serializer.is_valid():

serializer.save()

datas = serializer.data

else:

datas = serializer.errors

return Response(data=datas, status=200)

except KeyError as e :

return Response(data={"msg":"id not found in dict item of list "})

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

django批量修改table_django restframework 多对多的批量修改,基于逻辑删相关推荐

  1. 修改选中_win7文件名称如何批量修改

    在整理文件的时候,会发现有一些文件夹内的文件名都乱七八糟的的,需要对批量的文件进行重命名.改格式等操作,一个一个来十分耗费时间,其实可批量修改文件名,下面小编教你win7文件名称如何批量修改吧. 1. ...

  2. 帝国cms 未审核 showinfo.php,帝国CMS批量修改文章未审核状态及批量修改上线时间...

    帝国CMS批量修改审核文章未审核状态,批量自定义指定文件上线时间! 用法: 后台增加自定义页面  PHP CODE:$infouptime=to_time('2016-06-12 10:50:19') ...

  3. Linux: mv, rename单次及批次修改档案名称及后缀(批量修改文件名)

    在Windows 系统中,无论我们要重新命名资料夹或是档案, 通常都点下右键后选择重新命名即可, 如果对快捷键比较熟,直接按下F2 可以更快地达成目的. 而在Linux系统中,重新命名资料夹或档案也可 ...

  4. linux批量过去5小时前文件名,Linux批量修改文件名

    Linux批量修改文件名 2016.05.12 最近半个月在疯狂地做一些实验,然后需要批量地对一些文件的名字进行修改,而手工操作极其繁琐,在之前的博文中我说到我用了Cygwin软件,今天就告诉大家如何 ...

  5. 批量去除图片的黑色背景,并且统一修改图片尺寸

    批量去除图片的黑色背景,并且统一修改图片尺寸 将图片批量去除黑色背景后resize为256x160大小 import os from PIL import Image project_dir = os ...

  6. wps批量将文档括号内的字符串修改颜色

    wps批量将文档括号内的字符串修改颜色 文档内容如下,我们想把括号内的字符串全部修改为红色. 1)使用快捷键Ctrl+h,打开替换会话框. 输入查找的内容:((*)) 输出替换的内容:(\1) 然后点 ...

  7. 如何批量修改文件后缀名?(批量修改文件的扩展名)

    无需软件批量修改文件后缀名?怎么通过命令行批量修改文件后缀名?有时候由于文件后缀名格式不同,有的时候我们需要对文件扩展名进行修改,或者文件扩展名丢失,需要添加.如果数量少的文件那还简单直接修改就好了. ...

  8. 网易自媒体视频,批量修改md5采集下载上传,批量自动去水印加水印软件 今日头条自媒体视频,youtubu...

    网易自媒体视频,批量修改md5采集下载上传,批量自动去水印加水印软件 今日头条自媒体视频,youtubu 视频去重,批量自动去水印加水印软件 快视频,视频消重技术去水印去logo字幕工具 搜狐自媒体视 ...

  9. Mybatis一对多、多对一、批量插入

    在项目开发中,我们有遇到的对象关系通常是复杂的,每个对象并不是单独的.比如学生和老师之间关系,一个老师有多个学生,每个学生会对应一个老师(这里的老师主要是班主任),这种关系其实就是一对多的关系.Myb ...

最新文章

  1. 为什么一定要杀掉病毒?---帮一位老师解决MyDocument.exe优盘文件夹图标病毒问题...
  2. 解决首次运行WebDriverAgent手机开发者未信任问题
  3. openresty开发系列13--lua基础语法2常用数据类型介绍
  4. 跨线程取出控件的值的写法(不是跨线程赋予控件值)
  5. 一步一步写算法(之循环和递归)
  6. 如何在Outlook 2003和OWA中允许接受EXE附件
  7. 微信支付小程序开发php,关于微信小程序进行微信支付的步骤
  8. k2p 刷breed_斐讯路由器系列「K1-K2-K2P-K2T」-Breed刷入工具v1.1支持XP系统
  9. ISL68124与PMBUS
  10. Pygame教程系列四:播放音频篇
  11. c语言写木马程序,用c语言写的木马(详细)
  12. CDH之Cloudera Manager使用
  13. 台式机机械硬盘 - 简单快捷的安装
  14. 获取比Administrator还高的权限——SYSTEM权限
  15. 算术的逻辑运算与指令详解
  16. 【GDI+】MFC画图- 消除锯齿(转)
  17. oracle itl 故障,ORACLE ITL事务槽
  18. 语义网、本体、OWL基础知识梳理
  19. 【转】Linux服务器性能评估与优化(一)
  20. 【树莓派】USB摄像头默认和指定使用设备

热门文章

  1. 思科交换机密码清除方法记录
  2. Charles 抓包夜神模拟器,实现对App网络请求的监控
  3. python实现淘宝自动登录秒杀功能
  4. C++裁剪图像并填充
  5. 【无标题】抖音 s_v_web_id
  6. 突变位点注释软件snpEff 使用详解
  7. 数字后端基本概念介绍——Pin Blockage
  8. 移动硬盘(USB3.0)2TB在自己电脑上突然识别不了。。
  9. vscode文件飘红色波浪线
  10. 拉依达准则的一个c++实现