0

モデルの 1 つの save メソッドをオーバーライドしようとしています。その保存メソッド内で、次のようにモデルの別のメソッドを使用したいと思います。

class MyModel(models.Model):
    name = models.CharField(max_length=255)

    def do_something(self):
        pass

    def save(self,*args, **kwargs):
        self.do_something()
        super(MyModel, self).save(*args, **kwargs)

django が保存を実行するとき、オブジェクトは汎用の ModelBase クラスであり、ModeBase のサブクラスではないため、これは機能しません。だから私は得る:

unbound method do_something() must be called with MyModel instance as first argument (got ModelBase instance instead)

これを行う正しい方法は何ですか?

4

1 に答える 1

1

argsおよびkwargsオーバーライドされたsave()メソッドにも配置する必要があります。

class MyModel(models.Model):
    name = models.CharField(max_length=255)

    def do_something(self):
        pass

    def save(self, *args, **kwargs):
        self.do_something()
        super(MyModel, self).save(*args, **kwargs)

selfのパラメーターも忘れてしまいましたdo_something()!

アップデート

私はあなたの問題をよく理解していません。unbound method を呼び出したい場合はdo_something、それをクラスの外で定義し、`do_something(self): のようMyModelに呼び出すだけです。save()

class MyModel(class.Model):
  def save(self, *args, **kwargs):
    do_something(self)
    super(MyModel, self).save(*args, **kwargs)

def do_someting(my_model_instance):
  assert isinstance(my_model_instance, MyModel)
  ...
于 2012-05-25T20:33:32.017 に答える