在Django中添加对父模型抽象保存方法保存方法的操作

Add operation to save method of abstract save method of parent model in Django

我创建了基础模型并将其继承到我的所有模型中。这是我的 BaseModel:

class BaseModel(models.Model):
    create_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)
    created_by = models.ForeignKey('UserManager.User', default=1, on_delete=models.SET_DEFAULT,related_name='created_%(class)ss')
    updated_by = models.ForeignKey('UserManager.User', default=1, on_delete=models.SET_DEFAULT,related_name='updated_%(class)ss')

    class Meta:
        abstract = True
        ordering = ['create_date']

    def save(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        if self.user:
            if self.user.pk is None:
                self.created_by = self.user
            self.updated_by = self.user
        super(BaseModel, self).save(*args, **kwargs)

现在,我想向其中一个子模型的 save 方法添加一些操作,如下所示:

class Child(BaseModel):
    # Some fields go here. 
    def save(self, *args, **kwargs):
        # Some operations must run here. 

但是子模型的save方法没有运行了!
如何将子模型的保存方法与 abastract=True 模型的保存方法一起使用?

如果你从BaseModel继承ChildModel,当你到达BaseModel中的save方法时'self.class'仍然是ChildModel。所以它找到了Child的super,也就是BaseModel,所以调用了BaseModel中的save。

所以只要打电话,

super(ChildModel, self).save(*args, **kwargs)