Django 自带的模型方法(比如:save()、delete())不能满足我们需求的时候,我们可以改写它们,用我们自定义的方法覆盖他们。
比如,我们希望在使用 save() 方法的时候,打印出刚才保存的对象,可以这样做:
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def save(self, *args, **kwargs):
print('准备保存:' + self.name)
# 超类方法
super(Blog, self).save(*args, **kwargs)
print('保存完毕:' + self.name)
也可以阻止某些保存:
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def save(self, *args, **kwargs):
if self.name == "敏感词":
return
else:
super(Blog, self).save(*args, **kwargs)
改写 Django 自带的方法时,要记住调用超类的方法 —— super(Blog, self).save(*args, **kwargs) —— 来确保对象被保存到数据库中。
还要记住传递参数给这个模型方法 —— 即 *args, **kwargs,将保证你的代码自动支持这些参数。
批量操作中被覆盖的模型方法不会被调用。