django批量修改table_django restframework 多对多的批量修改,基于逻辑删
模型:
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 多对多的批量修改,基于逻辑删相关推荐
- 修改选中_win7文件名称如何批量修改
在整理文件的时候,会发现有一些文件夹内的文件名都乱七八糟的的,需要对批量的文件进行重命名.改格式等操作,一个一个来十分耗费时间,其实可批量修改文件名,下面小编教你win7文件名称如何批量修改吧. 1. ...
- 帝国cms 未审核 showinfo.php,帝国CMS批量修改文章未审核状态及批量修改上线时间...
帝国CMS批量修改审核文章未审核状态,批量自定义指定文件上线时间! 用法: 后台增加自定义页面 PHP CODE:$infouptime=to_time('2016-06-12 10:50:19') ...
- Linux: mv, rename单次及批次修改档案名称及后缀(批量修改文件名)
在Windows 系统中,无论我们要重新命名资料夹或是档案, 通常都点下右键后选择重新命名即可, 如果对快捷键比较熟,直接按下F2 可以更快地达成目的. 而在Linux系统中,重新命名资料夹或档案也可 ...
- linux批量过去5小时前文件名,Linux批量修改文件名
Linux批量修改文件名 2016.05.12 最近半个月在疯狂地做一些实验,然后需要批量地对一些文件的名字进行修改,而手工操作极其繁琐,在之前的博文中我说到我用了Cygwin软件,今天就告诉大家如何 ...
- 批量去除图片的黑色背景,并且统一修改图片尺寸
批量去除图片的黑色背景,并且统一修改图片尺寸 将图片批量去除黑色背景后resize为256x160大小 import os from PIL import Image project_dir = os ...
- wps批量将文档括号内的字符串修改颜色
wps批量将文档括号内的字符串修改颜色 文档内容如下,我们想把括号内的字符串全部修改为红色. 1)使用快捷键Ctrl+h,打开替换会话框. 输入查找的内容:((*)) 输出替换的内容:(\1) 然后点 ...
- 如何批量修改文件后缀名?(批量修改文件的扩展名)
无需软件批量修改文件后缀名?怎么通过命令行批量修改文件后缀名?有时候由于文件后缀名格式不同,有的时候我们需要对文件扩展名进行修改,或者文件扩展名丢失,需要添加.如果数量少的文件那还简单直接修改就好了. ...
- 网易自媒体视频,批量修改md5采集下载上传,批量自动去水印加水印软件 今日头条自媒体视频,youtubu...
网易自媒体视频,批量修改md5采集下载上传,批量自动去水印加水印软件 今日头条自媒体视频,youtubu 视频去重,批量自动去水印加水印软件 快视频,视频消重技术去水印去logo字幕工具 搜狐自媒体视 ...
- Mybatis一对多、多对一、批量插入
在项目开发中,我们有遇到的对象关系通常是复杂的,每个对象并不是单独的.比如学生和老师之间关系,一个老师有多个学生,每个学生会对应一个老师(这里的老师主要是班主任),这种关系其实就是一对多的关系.Myb ...
最新文章
- 为什么一定要杀掉病毒?---帮一位老师解决MyDocument.exe优盘文件夹图标病毒问题...
- 解决首次运行WebDriverAgent手机开发者未信任问题
- openresty开发系列13--lua基础语法2常用数据类型介绍
- 跨线程取出控件的值的写法(不是跨线程赋予控件值)
- 一步一步写算法(之循环和递归)
- 如何在Outlook 2003和OWA中允许接受EXE附件
- 微信支付小程序开发php,关于微信小程序进行微信支付的步骤
- k2p 刷breed_斐讯路由器系列「K1-K2-K2P-K2T」-Breed刷入工具v1.1支持XP系统
- ISL68124与PMBUS
- Pygame教程系列四:播放音频篇
- c语言写木马程序,用c语言写的木马(详细)
- CDH之Cloudera Manager使用
- 台式机机械硬盘 - 简单快捷的安装
- 获取比Administrator还高的权限——SYSTEM权限
- 算术的逻辑运算与指令详解
- 【GDI+】MFC画图- 消除锯齿(转)
- oracle itl 故障,ORACLE ITL事务槽
- 语义网、本体、OWL基础知识梳理
- 【转】Linux服务器性能评估与优化(一)
- 【树莓派】USB摄像头默认和指定使用设备