Разница между функциями add () и create () и функциональностью метода save () - PullRequest
0 голосов
/ 19 марта 2020

Я пытался понять разницу между функциями .add() и .create() в документации django. Насколько я понял, функция:

add() с внешним ключом просто обновляет модель, а с отношением m2m она выполняет массовое создание, которое в конечном итоге не требует никакого метода сохранения. create функция создаст экземпляр объекта и сохранит его.

Я сомневаюсь:

  1. Что на самом деле делает сохранение? Если только создать экземпляр без его сохранения, что это значит?
  2. В чем главное отличие функций add() и create()?

1 Ответ

1 голос
/ 19 марта 2020

Краткие ответы будут следующими:

Что на самом деле делает сохранение? Если только создать экземпляр без его сохранения, что это значит?

save действительно создает экземпляр в некоторых случаях. Он работает одним из следующих двух способов:

  1. Если первичный ключ записи имеет значение (т. Е. Что-то еще, кроме None или пустая строка), Django выполняет UPDATE.
  2. Если первичный ключ объекта не установлен или если 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)

будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...