django - 批量更新不适用于文件字段上传 django
问题描述
我正在尝试更新 django 中 fileField 中的多个文件。我正在从数据库中获取对象,并通过迭代它们来分配新文件,然后将对象保存在列表中。如果我使用 bulk_update 它会更新所有字段,包括 FileFields 但不上传文件,如果我遍历每个对象并使用 .save(),那么它工作正常。
但是使用 .save() 函数会多次访问数据库。所以,我需要使用 bulk_update
代码
update_list = []
t_obj = FileFieldDetails.objects.filter(ques_key__in=q_key)
for t in t_obj.iterator():
t.value = request.FILES[0]
update_list.append(t)
# Not Working
FileFieldDetails.objects.bulk_update(update_list,['value'])
# Working
for i in update_list:
i.save()
解决方案
您可以将 for 循环包装在事务 atomic中。
原子性是数据库事务的定义属性。atomic 允许我们创建一个代码块,在其中保证数据库的原子性。如果代码块成功完成,则将更改提交到数据库。如果出现异常,则回滚更改。
像这样:
from django.db import transaction
with transaction.atomic():
for i in update_list:
i.save()
这可以帮助您减轻对数据库的影响
推荐阅读
- c# - 将谷歌凭据用于生产应用程序的最佳方式是什么?
- node.js - 向数据库添加新记录时出现 UnhandledPromiseRejectionWarning
- java - 尝试启动活动时出现二进制 XML 运行时异常
- java - Why method that calls another one which throws RuntimeException needs return statement?
- matlab - Optimization problem - GlobalSearch is not generating initial vector in MATLAB
- django - 如何将多个字段数据列表与父模型一起发布到子模型
- laravel - Webpack - Use variable to compile
- fabricjs - 如何使用fabric.js为画布中的图像填充颜色
- c++ - 编译器优化消除了导致链接器错误的隐式模板实例化
- uwp - 如何在 UWP 中修复“没有任何空格的滑块刻度开始和结束位置”