0

我正在尝试覆盖我的一个模型的保存方法。在该保存方法中,我想使用模型的另一种方法,如下所示:

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

您也应该放置argskwargs覆盖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()

更新

我不太明白你的问题。如果您想调用未绑定的方法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 回答