Django 5 для начинающих

Прогресс по курсу:  9/1004

3.3 Первые ORM запросы (CRUD)
4 из 15 шагов пройдено
0 из 49 баллов  получено

Обновление объектов

Для обновления объекта в БД применяется метод save(). При этом Django полностью обновляет объект и все его свойства, даже если мы их не изменяли. Например:

post_1 = Post.objects.get(id=1)
post_1.text = 'Мой первый измененный текст через ORM запрос'
post_1.save()

Здесь мы сначала в переменную post_1 прочитали из БД все данные модели Post, информация о котором хранится в БД в записи с id=1. Затем во второй строке изменили содержимое поля text. И наконец, в третьей строке вернули (записали) всю информацию в БД.

Когда нужно обновить только определенные поля, следует использовать параметр update_fields. Так, если, например, в приведенном примере требуется изменить только одно поле text, это можно сделать с помощью следующего кода:

post_1 = Post.objects.get(id=1)
post_1.text = 'Мой первый измененный текст через ORM запрос'
post_1.save(update_fields=["text"])

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

Другой способ обновления объектов в БД предоставляет метод update() в сочетании с методом filter(), которые вместе выполняют один запрос к базе данных.

Предположим, что нам нужно обновить запись в таблице БД с id=2. Это можно сделать с помощью следующего кода:

Post.objects.filter(id=2).update(text='Моя вторая измененная запись')

При таком подходе не нужно предварительно получать из БД обновляемый объект, что обеспечивает увеличение скорости взаимодействия приложения с БД.

Когда необходимо обновить все записи в столбце таблицы БД вне зависимости от условия, то надо комбинировать метод update()с методом all() без параметров:

Post.objects.all().update(text='Все посты изменены')

Здесь всем постам будет присвоено новое значение поля text.

Для обновления записей в БД есть еще один метод - update_or_create(). Если запись существует, то этот метод ее обновит, а если записи нет, то добавит ее в таблицу. О нем мы говорим далее по курсу.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Когда нужно обновить только определенные поля, следует использовать параметр update_fields. Так, если, например, в приведенном примере требуется изменить только одно поле name, это можно сделать с помощью следующего кода:

post_1 = Post.objects.get(id=1)
post_1.text = 'Мой первый измененный текст через ORM запрос'
post_1.save(update_fields=["text"])

Здесь необходимо поменять только поле text (поменяйте, пожалуйста name на text)

@Евгений_Епишкин, Спасибо, исправил.