Próbuję zaimplementować dziedziczenie abstrakcyjne w Django za pomocą następującego kodu, ale generuje on błąd maksymalnej głębokości rekursji. Próbuję zastąpić metodę modelu save
modelu.Streszczenie Dziedziczenie w Django Model, powodując błąd głębokości rekurencji MAX
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)
produkuje ten błąd (koniec śladu, to długa):
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
Czy próbowałeś zastąpić 'self .__ class__' przez' BaseModel'? Nawiasem mówiąc, nie potrzebujesz 'return', ponieważ' save' nie zwraca niczego. – Maccesch
o tak, dziękuję. :) – ultrajohn