Django 自帶的模型方法(比如:save()段直、delete())不能滿足我們需求的時(shí)候痕貌,我們可以改寫它們秘蛔,用我們自定義的方法覆蓋他們市怎。
比如岁忘,我們希望在使用 save() 方法的時(shí)候,打印出剛才保存的對(duì)象区匠,可以這樣做:
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def save(self, *args, **kwargs):
print('準(zhǔn)備保存:' + 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 自帶的方法時(shí)干像,要記住調(diào)用超類的方法 —— super(Blog, self).save(*args, **kwargs) —— 來(lái)確保對(duì)象被保存到數(shù)據(jù)庫(kù)中。
還要記住傳遞參數(shù)給這個(gè)模型方法 —— 即 *args, **kwargs驰弄,將保證你的代碼自動(dòng)支持這些參數(shù)麻汰。
批量操作中被覆蓋的模型方法不會(huì)被調(diào)用。