1. ホーム
  2. ジャンゴ

[解決済み] djangoモデルのカスタムsave()メソッドでは、新しいオブジェクトをどのように識別する必要がありますか?

2022-04-10 16:52:43

質問

Django モデルオブジェクトの save() メソッドで、新しいレコードを保存するとき (既存のレコードを更新するときではない) に特別なアクションをトリガーしたいのです。

(self.id != None)のチェックは、自己のレコードが新しく、更新されていないことを保証するのに必要かつ十分なのでしょうか? これは見落とすかもしれない任意の特別なケース?

解決方法は?

更新しました。 ということを明確にした上で self._state はプライベートなインスタンス変数ではありませんが、衝突を避けるためにそのように命名されています。 self._state.adding をチェックするのが望ましいとされるようになった。


self.pk is None:

は、新しいモデルオブジェクトの中で、オブジェクトが UUIDField をその primary_key .

心配しなければならないのは、id以外のフィールドに一意性制約があるかどうかです(例えば、他のフィールドに二次的一意性インデックスがある場合)。この場合、新しいレコードが手元にあるにもかかわらず、それを保存することができない可能性があります。