Разница между object.create() и object.save() в django orm

u = UserDetails.objects.create(first_name='jake',last_name='sullivan')
u.save()

UserDetails.objects.create() и u.save() выполняют одну и ту же функцию save(). В чем разница? Есть ли дополнительная проверка или преимущество при использовании create() vs save()?

Похожие вопросы:
- Каков наилучший способ создания объекта модели в Django? - Django: разница между save() и create() с точки зрения транзакций

Ответы

Ответ 1

Документация Django говорит, что это то же самое. Это просто более удобно, чтобы сделать его на одной строке. Вы могли бы сделать save() на одной строке, но это было бы более подробным и менее читаемым - ясно, что вы создаете новый объект с помощью метода create().

create(**kwargs)

Удобный метод для создания объекта и сохранения его в одном шаг. Таким образом:

p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

и

p = Person(first_name="Bruce", last_name="Springsteen")
p.save(force_insert=True)

эквивалентны.

Параметр force_insert задокументирован в другом месте, но все это означает что новый объект всегда будет создан. Обычно вам не нужно беспокоиться об этом. Однако, если ваша модель содержит ручную начальную значение ключа, которое вы установили, и если это значение уже существует в база данных, вызов create() завершится с IntegrityError, поскольку первичные ключи должны быть уникальными. Будьте готовы обработать исключение, если вы используете ручные первичные ключи.