Как изменить запись в БД используя Django ORM одним запросом

Мне нужно изменить только один элемент в модели django. Какой метод QuerySet может позволить изменить один элемент без предварительного получения объекта ORM через objects.get (Просто нужно сделать чтобы код работал как можно быстрее). Запрос из SQL примерно UPDATE table SET variable='value' WHERE other_variable=0


Ответы (1 шт):

Автор решения: Roman Konoval

Сделать изменение без вычитывания объекта одним модифицирующим запросом к базе можно используя метод update:

MyModel.objects.filter(other_variable=0).update(variable='value')

Иногда бывает нужно использовать значение(я) из записи, которую изменяем. Это можно сделать используя query expressions:

MyModel.objects.filter(other_variable=0).update(variable=F('variable') + 1)

Это будет аналог такого SQL запроса:

UPDATE table SET variable=variable+1 WHERE other_variable=0

Если в условии фильтра используется поле с внешним ключом, например так:

MyModel.objects.filter(user=user).update(variable='value')

то при этом все равно выполняется один запрос:

UPDATE my_model SET "variable" = 'value' WHERE "my_model"."user_id" = 3
→ Ссылка