gpt4 book ai didi

django - Django Model中的抽象继承,导致MAX递归深度错误

转载 作者:行者123 更新时间:2023-12-04 05:38:04 24 4
gpt4 key购买 nike

我正在尝试使用以下代码在 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)

产生此错误(跟踪结束,很长):
  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

最佳答案

不是 调用 superself.__class__ !在实际类上调用它:

return super(BaseModel, self).save(*args, **kwargs)

这是因为 self.__class__总是指实例的实际具体类。所以如果你继承 MyModel来自 BaseModel ,当您到达 saveBaseModel 中的方法 self.__class__还在 MyModel .于是找到了MyModel的super,也就是BaseModel,于是调用了BaseModel中的save,又一次找到了MyModel的super……

关于django - Django Model中的抽象继承,导致MAX递归深度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10948132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com