2015-12-19 12 views
6
1. instance.save() 

2. instance.foo = foo; instance.save(update_fields=['foo']) 

3. InstanceClass.objects.filter(id=instance.id).update(foo=foo) 

#3は信頼できないことがあります。
私は#3を実行した後、fooが正しく設定されていない(コミットされていません)django、プロパティはモデルインスタンスを更新します

私は信号ハンドラを実行したくないときには#3を使用していました。

上記3つのそれぞれを使用する場合は、

答えて

3

レコードを更新するだけで、モデルオブジェクトで何もする必要がない場合は、モデルオブジェクトをメモリにロードするのではなく、update()を呼び出すことが最も効率的です。たとえば、代わりにこれを行う:

instance = Entry.objects.get(id=10) 
instance.comments_on = False 
instance.save() 

は、次の操作を行います。

Entry.objects.filter(id=10).update(comments_on=False) 

NB:また何かでデータベースに変更される可能性があり、前記競合状態を防ぐ

  1. update()を使用してオブジェクトの読み込みと呼び出しの間の短い時間。save(). *
  2. update()update()はSQLレベルで更新を行いますので、save()を呼び出さないので、save()メソッドをオーバーライドした場合は、get()save()で最初の方法を使用する必要があります。

Querysetのドキュメントを確認してください。すべてここで説明します。

関連する問題