django多对多关系表中批量修改另一个字段的数据(一个字段不变)

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)
代码与数据库运行结果如下图
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值