我在Django应用程序中有一个抽象模型:
class HistoryTrackedModel(models.Model):
def save(self, *args, **kwargs):
super(self.model, self).save(*args, **kwargs) # Call the real save method
# Do some miscellaneous work here (after saving)
class Meta:
abstract = True
子模型使用抽象模型作为基础:
class Project(HistoryTrackedModel):
name = models.TextField(unique=True, blank=False, db_index=True)
... other fields ...
def __unicode__(self):
return self.name
class Meta:
ordering = ('name',)
当我实例化Project的实例(子模型)并调用save()
方法时,我收到以下错误:
'项目'对象没有属性' model'
它在抽象类的保存方法中super(self.model, self).save()
调用失败了。我试图将该方法更改为以下方法,但它(很明显,现在我看一下)会在递归循环中被捕获:
class HistoryTrackedModel(models.Model):
def save(self, *args, **kwargs):
my_model = type(self)
super(my_model, self).save(*args, **kwargs) # Call the real save method
我在这里做错了什么?不应该从基类继承的所有子类(它本身都继承自models.Model)包含model
属性吗?
答案 0 :(得分:4)
super(HistoryTrackedModel, self).save(*args, **kwargs)
应该有用。