在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)
我创建了基础模型并将其继承到我的所有模型中。这是我的 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)