【发布时间】:2016-01-10 03:13:02
【问题描述】:
我在 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() 方法时,我收到以下错误:
“项目”对象没有属性“模型”
在抽象类的 save 方法中调用 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 属性吗?
【问题讨论】: