Как при вызове метода модели save Django определяет вызывать sort или update
Python
Middle
Без компании
Как при вызове метода модели save Django определяет вызывать sort или update
Ответы
Django автоматически определяет, вызывать `INSERT` или `UPDATE`, проверяя первичный ключ (`pk`) объекта модели:
- Если `pk` равен `None` или не существует в БД — выполняется `INSERT` (создание новой записи).
- Если `pk` существует в БД — выполняется `UPDATE` (обновление существующей записи).
**Пример:**
```
# INSERT (новая запись)
new_obj = MyModel(name="New")
new_obj.save() # Django выполнит INSERT
# UPDATE (существующая запись)
existing_obj = MyModel.objects.get(pk=1)
existing_obj.name = "Updated"
existing_obj.save() # Django выполнит UPDATE
```
**Нюансы:**
- Можно явно указать `force_insert=True` или `force_update=True` в `save()`.
- Если `force_insert` используется для существующего объекта, выбросится исключение.
- При обновлении Django обновляет только измененные поля (оптимизация).