web-dev-qa-db-ja.com

Django ormのobjects.create()とobject.save()の違い

_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()の違い

39
jacquel

Djangoドキュメンテーションはそれが同じだと言っている 。それはただより便利です 1行でsave()を作成することもできますが、より冗長で読みにくくなります-create()で新しいオブジェクトを作成していることは明らかです方法。

create(**kwargs)

オブジェクトを作成し、1ステップですべて保存するための便利なメソッド。したがって:

_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で失敗します。手動主キーを使用している場合は、例外を処理する準備をしてください。

59
Maxime Lorant