批量更新不适用于文件字段上传 django
bulk update not working for filefield upload 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 循环包装在 transaction atomic.
中
Atomicity is the defining property of database transactions. atomic allows us to create a block of code within which the atomicity on the database is guaranteed. If the block of code is successfully completed, the changes are committed to the database. If there is an exception, the changes are rolled back.
像这样:
from django.db import transaction
with transaction.atomic():
for i in update_list:
i.save()
这可以帮助您减轻对数据库的点击
我正在尝试更新 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 循环包装在 transaction atomic.
中Atomicity is the defining property of database transactions. atomic allows us to create a block of code within which the atomicity on the database is guaranteed. If the block of code is successfully completed, the changes are committed to the database. If there is an exception, the changes are rolled back.
像这样:
from django.db import transaction
with transaction.atomic():
for i in update_list:
i.save()
这可以帮助您减轻对数据库的点击