1. ホーム
  2. django

[解決済み] Django - Model.create() メソッドをオーバーライドしますか?

2023-01-06 19:43:39

質問

その Django ドキュメント をオーバーライドする例だけを挙げています。 save()delete() . しかし、私はモデルに対していくつかの追加処理を定義したいと思います。 が作成されたときだけ . Railsに慣れている人なら、この方法は :before_create フィルタを作成するのと同じです。これは可能でしょうか?

どのように解決するのですか?

オーバーライド __init__() を上書きすると、オブジェクトの Python 表現がインスタンス化されるたびにコードが実行されることになります。rails は知りませんが :before_created フィルタは、オブジェクトがデータベースで作成されたときに実行されるコードのように私には聞こえます。もし、データベースに新しいオブジェクトが作成されたときにコードを実行したいのであれば、オーバーライドする必要があります。 save() をオーバーライドして、オブジェクトが pk 属性があるかどうかを調べます。コードは次のようになります。

def save(self, *args, **kwargs):
    if not self.pk:
        # This code only happens if the objects is
        # not in the database yet. Otherwise it would
        # have pk
    super(MyModel, self).save(*args, **kwargs)