データベースにinsertする直前になにか処理をしてほしい場合にはModelのsaveメソッドを上書きする
class Event(models.Model):
class Meta:
unique_together = ('name', 'held_date')
id = models.CharField(primary_key=True, max_length=20)
name = models.CharField(max_length=8)
held_date = models.DateField()
def save(self, **kwargs):
u"""insertする直前に主キーの値をつくる"""
self.id = "%s@%s" % (str(self.held_date), self.name)
super(Event, self).save(**kwargs)
djangoのsave()を上書きしたとき、マネージャのメソッドでは呼んでくれるのと呼んでくれないのがある
呼んでくれる
create
get_or_create
update_or_create
呼んでくれない
-
bulk_create
This does *not* call save() on each of the instances
意外と呼んでくれる。
signals.pre_save
というのもあるが、やってること同じだしsave
上書きのほうが明示的で良い。