Djangoでモデルのsaveをフックする

Django の子ネタ。

Django のモデルの save メソッドには、 pre_savepost_save なフックポイントがあって、 これ使うとちょっとした処理を差し込めて便利。

# myapp/models.py

from django.db import models

#   必要なものをインポート。
from django.dispatch import dispatcher
from djanog.db.models import signals

class MyModel(models.Model):
    #   省略

#   セーブ前に呼ばれる関数
def pre_save_mymodel(instance, **kwargs):
    #   セーブ前にやりたい事を書く。

#   セーブ後に呼ばれる関数
def post_save_mymodel(instance, **kwargs):
    #   セーブ後にやりたい事を書く。

#   関数を登録。
dispatcher.connect(receiver=pre_save_mymodel,
                   signal=signals.pre_save,
                   sender=MyModel)
dispatcher.connect(receiver=post_save_mymodel,
                   signal=signals.post_save,
                   sender=MyModel)

こうやっておくと、 MyModelsave が呼ばれたときにコールされる。 post_save な関数には created ってブール値が入ってきてるので、 新規登録なのか?更新なのか?も分かるようになってるよ。

今作ってるブログ では、 コレ使って更新Ping飛ばしたり、 twitterに投げたりしとります。

Posted at: 
2008/02/07 01:23:31
4 Comments
1 TrackBack
Tags: 
Django
Python
Trackback: 
http://humming.via-kitchen.com/2008/02/07/hook-models-save-on-django/trackback/

TrackBacks

[Django][その他]巡回 - 常山日記

Google Code: toolshed なんか面白そうな予感! :) Blog: DjangoのテンプレートでHTMLを出力 Djangoでモデルのsaveをフックする Ruby on Rails、Djangoを試してみることにした Playing the Django, MAMP style others: Gimpで写真を映画のワンシーンのように加工する 仮想化

Created at: 
2008/02/07 01:51:21

Comments

常山

おぉ、面白そう!
期待!!!

Created at: 
2008/02/07 01:58:55

nobu

頑張りますよー!
ツッコミも大歓迎です!

Created at: 
2008/02/07 05:46:58

everes

MySQLの全文検索は、__searchを使うのが吉。
結局他のDBでは動かないけど、きちんと NotImplementedError が出るみたいです。

Created at: 
2008/02/07 09:41:00

nobu

ありがとうございます!
そちらの方がスマートで良いですね!

Created at: 
2008/02/07 11:25:51

Add Comment

Add Comment