Краткие ответы будут следующими:
Что на самом деле делает сохранение? Если только создать экземпляр без его сохранения, что это значит?
save действительно создает экземпляр в некоторых случаях. Он работает одним из следующих двух способов:
- Если первичный ключ записи имеет значение (т. Е. Что-то еще, кроме None или пустая строка), Django выполняет UPDATE.
- Если первичный ключ объекта не установлен или если UPDATE ничего не обновил, Django выполняет INSERT. Вы можете прочитать больше в документах
В чем главное отличие функций add () и create ()?
Итак, для упрощения create()
использует метод save с аргументом force_insert
, установленным в True, чтобы Django использовал только INSERT, не отступая при выполнении UPDATE.
add метод is используется для создания M2M-отношений между записями, и это немного отличается от create
. Вы не можете использовать его, когда запись, с которой вы связываете другие записи, не имеет первичного ключа.
Итак, это:
a = Model()
a.add(other_model_instance)
вызовет ошибку, в то время как это:
a = Model()
a.save() # or simply Model.objects.create()
a.add(other_model_instance)
будет работать.