改写预定的模型方法

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,将保证你的代码自动支持这些参数。

批量操作中被覆盖的模型方法不会被调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容