Массовое обновление не работает для загрузки файлового поля django - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь обновить несколько файлов в fileField в django.Я выбираю объекты из базы данных и назначаю новый файл, перебирая их, а затем сохраняю объект в списке.Если я использую 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()

1 Ответ

0 голосов
/ 26 сентября 2019

Вы можете заключить цикл for в атомарную транзакцию .

Атомность является определяющим свойством транзакций базы данных.atomic позволяет нам создать блок кода, в котором гарантируется атомарность базы данных.Если блок кода успешно завершен, изменения фиксируются в базе данных.Если есть исключение, изменения отменяются.

Примерно так:

from django.db import transaction

with transaction.atomic():
    for i in update_list:
        i.save()

Это может помочь вам уменьшить попадания в вашу базу данных

...