ult*_*ohn 6 django recursion inheritance depth
我正在尝试使用以下代码在Django中实现抽象继承,但它会产生MAX递归深度错误.我试图覆盖模型的save方法.
class BaseModel(models.Model):
class Meta:
abstract = True
def save(self, *args, **kwargs):
#i'm doing something here
#i think the problem is in the return statement specifically because of the
#self.__class__ expression.
return super(self.__class__, self).save(*args, **kwargs)
class MyModel(BaseModel):
p = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
产生此错误(跟踪结束,它很长):
File "/home/jultra/ap3w/jultra_01/mysite/testsite/models.py", line 10, in save
return super(self.__class__, self).save(*args, **kwargs)
File "/home/jultra/ap3w/jultra_01/mysite/testsite/models.py", line 10, in save
return super(self.__class__, self).save(*args, **kwargs)
File "/home/jultra/ap3w/jultra_01/mysite/testsite/models.py", line 10, in save
return super(self.__class__, self).save(*args, **kwargs)
File "/home/jultra/ap3w/jultra_01/mysite/testsite/models.py", line 10, in save
return super(self.__class__, self).save(*args, **kwargs)
RuntimeError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)
Dan*_*man 14
难道不叫super上self.__class__!在实际课程上调用它:
return super(BaseModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这是因为self.__class__始终引用实例的实际具体类.所以,如果你继承MyModel从BaseModel,当你的save方法BaseModel self.__class__仍然是MyModel.所以它找到了MyModel的超级,它是BaseModel,因此调用BaseModel中的save,它再次找到了MyModel的超级...
| 归档时间: |
|
| 查看次数: |
1149 次 |
| 最近记录: |