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

时间:2020-06-29 11:58:49

标签: python django django-models django-inheritance

我创建基本模型并继承所有模型。这是我的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模型的保存方法一起使用?

1 个答案:

答案 0 :(得分:1)

如果您从BaseModel继承ChildModel,则当您进入BaseModel'self。 class '中的save方法时,仍然是ChildModel。因此,它将找到Child的超级对象,即BaseModel,因此在BaseModel中调用保存。

所以只需致电,

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
相关问题