django内置的批量增加方法为bulk_create,批量更新方法为bulk_update。在一些多对多的模型中我们可以使用批量创建和修改进行快速创建。但是bulk_updated()的缺点在于有时候不好传参数。那么对于调用bulk_update不好传参的数据如何批量更新呢?
我们可以拆解,将批量修改可以拆分为删除和批量创建两步。
举个例子,我们现在有文章表和标签表是多对多模型。模型层如下所示
class Article_Tag(models.Model):
article = models.ForeignKey(Article,on_delete=models.CASCADE)
tag = models.ForeignKey(Tag,on_delete=models.CASCADE)
class Article(models.Model):
#...省略掉文章等与要讲的内容不相关的字段
tags = models.ManyToManyField(to='Tag',
through='Article_Tag',
through_fields=('article','tag')
)
class Tag(models.Model):
name = models.CharField(verbose_name="标签",max_length=32)
blog = models.ForeignKey(verbose_name="站点名称",to='Blog',null=True,on_delete=models.CASCADE)
比如多对多关联产生的第三张表Article_Tag有如下内容:
现在我们想要修改原本与文章id为7相关联的标签1,2改为与文章7关联的标签是3,4。
第一步删除 delete = models.Article_Tag.objects.filter(article__id=7).delete() 第二步将批量创建的内容生成对象以准备批量加入数据库
many_list = [[7,3],[7,4]]
object_list=[]
for in_list in many_list:
object_list.append(models.Article_Tag(article_id=in_list[0], tag_id=in_list[1]))
第三步将生成的对象用批量加入数据库
create = models.Article_Tag.objects.bulk_create(object_list)
代码与数据库运行结果如下图