Как обновить базу данных django со списком элементов словаря?

У меня есть список пар "ключ-значение".

stat = [{'id': 1, 'status': 'Not Fixed'}, {'id': 2, 'status': 'Not Fixed'}, {'id': 4, 'status': 'Not Fixed'}, {'id': 5, 'status': 'Not Fixed'}, {'id': 6, 'status': 'Not Fixed'}, {'id': 7, 'status': 'Not Fixed'}]

Идентификатор в этом списке представляет собой идентификатор (первичный ключ) моей модели django. Как я могу обновить существующие записи в моей базе данных с помощью этого списка?

Файл Models.py

class bug(models.Model):
.......
.......
status = models.CharField(max_length=25, choices=status_choice, default="Pending")

EDIT: Поскольку этот ответ выбран как правильный, я хочу скопировать ответ Hemal https://stackoverflow.com/a/74541837/2281853 для использования bulk_update, это лучше для производительности БД, так как выполняется только 1 запрос

update_objects = []
for update_item in stat:
    update_objects.append(bug(**update_item))

bug.objects.bulk_update(update_objects, [update_field in stat[0].keys() if update_field != 'id'])

Оригинальный ответ:

for update_item in stat:
    bug_id = update_item.pop('id')
    bug.objects.filter(id=bug_id).update(**update_item)

С помощью этого кода вы можете обновлять любые данные в вашем списке, не ограничиваясь status, если столбцы определены в вашей модели.

Вы можете сделать bulk_update

update_obj = []
for item in stat:
    update_obj.append(bug(id=item['id'], status=item['status']))
 
bug.objects.bulk_update(update_obj, ['status'])

stat = [{'id': 1, 'status': 'Not Fixed'}, {'id': 2, 'status': 'Not Fixed'}, {'id': 4, 'status': 'Not Fixed'}, {'id': 5, 'status': 'Not Fixed'}, {'id': 6, 'status': 'Not Fixed'}, {'id': 7, 'status': 'Not Fixed'}]
for record in stat:
    bug.objects.update_or_create(
        id=record['id'],
        defaults={'status': record['status']},
    )

Мы можем использовать update или create для обновления существующих и create для отсутствующих в базе данных.

Вернуться на верх