我正在尝试覆盖其中一个模型的保存方法。在该保存方法中,我想使用该模型的另一种方法,如下所示:
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执行save时,该对象是一个通用的ModelBase类,而不是我的ModeBase的子类。所以我得到了:
unbound method do_something() must be called with MyModel instance as first argument (got ModelBase instance instead)
这样做的正确方法是什么?
答案 0 :(得分:0)
您也应该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()
参数!
<强>更新强>
我不太明白你的问题。如果你想调用未绑定的方法do_something
,请在类MyModel
之外用一个方法定义它,然后从save()
调用它,如`do_something(self):
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)
...