Как сохранить список объектов с помощью метода bulk_update в Django? - PullRequest
1 голос
/ 26 сентября 2019

У меня есть цикл, перебирающий объекты и добавляющий их в список

for note in notes:
             old_note = Note(
                        user_id=note['id']),
                        author=note['author'],         
                    )
                    existing_notes.append(old_note)
 Worklog.objects.bulk_update(
                existing_notes,
                [
                    'user_id',
                    'author',
                ],
                batch_size=1000)

, но он не работает так, как мне хотелось бы.Когда я запускаю свой сценарий с задачей сельдерея в Django, это своего рода сбой.Пожалуйста, помогите, ребята, если таковые способны показать мою ошибку.Моя конечная цель - добавить все нужные мне объекты в список и сразу обновить их в базе данных, потому что у меня действительно много данных

1 Ответ

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

Если вы создаете новые объекты, вы должны использовать bulk_create вместо bulk_update.

bulk_update будет пытаться найти и обновить существующие объекты, но когда вы создаете объект посредством создания экземпляра его классаКак и в случае с Note(...), он еще не сохраняется в базе данных.Вот почему вы получаете ошибки.

Кроме того, вы используете конфликтующие модели.Вы создаете список Notes, но пытаетесь обновить его через Worklog.Используйте либо Note, либо Worklog для них обоих.

Ваш обновленный код должен выглядеть следующим образом:

for note in notes:
             old_note = Note(
                        user_id=note['id']),
                        author=note['author'],         
                    )
                    existing_notes.append(old_note)

 Note.objects.bulk_create(
                existing_notes,
                batch_size=1000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...