Как мне запустить операторы update
и select
на одном и том же, queryset
вместо того, чтобы выполнять два запроса: - один для выбора объекта - и один для обновления объекта
Эквивалент в SQL будет примерно таким:
update my_table set field_1 = 'some value' where pk_field = some_value
update
метод, тогда никакие сигналы, прикрепленные к этой модели или другому «материалу кода», не будут работать с объектами. Просто указатель от того, кто обгорел :)update
метод отлично подходит для массовых обновлений, но он должен вызвать предупреждение в вашей голове, когда вы его используете, что вам нужно просмотреть любые сигналы, прикрепленные к этому объекту, которые, возможно, также потребуетсяMyModel.objects.filter(pk=some_value).update(field1=self.data)
Объекты базы данных Django используют один и тот же метод save () для создания и изменения объектов.
Ссылка: https://docs.djangoproject.com/en/1.9/ref/models/instances/
источник
В этом ответе сравниваются два вышеуказанных подхода. Если вы хотите обновить несколько объектов в одной строке, выполните:
В противном случае вам придется перебирать набор запросов и обновлять отдельные объекты:
Подход 1 быстрее, потому что он выполняет только один запрос к базе данных, по сравнению с подходом 2, который делает запросы к базе данных n + 1. (Для n элементов в наборе запроса)
Первый подход делает один запрос к БД, т.е. ОБНОВЛЕНИЕ, второй - два: ВЫБРАТЬ, а затем ОБНОВИТЬ.
Компромисс заключается в том, что, предположим, у вас есть какие-либо триггеры, такие как обновление
updated_on
или любые подобные связанные поля, они не будут запускаться при прямом обновлении, то есть подходе 1.Подход 1 используется в наборе запросов, поэтому можно обновлять сразу несколько объектов, а не в случае подхода 2.
источник
только в случае с
serializer
вещами, можно очень просто обновить!только в случае в
form
вещах!источник
Django form
от Django Proper.