Djangoでモデルのsaveをフックする
Django の子ネタ。
Django のモデルの save メソッドには、 pre_save と post_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)
こうやっておくと、 MyModel の save が呼ばれたときにコールされる。 post_save な関数には created ってブール値が入ってきてるので、 新規登録なのか?更新なのか?も分かるようになってるよ。
今作ってるブログ では、 コレ使って更新Ping飛ばしたり、 twitterに投げたりしとります。
- Posted at:
- 2008/02/07 01:23:31
- 4 Comments
- 1 TrackBack
- 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
常山
おぉ、面白そう!
期待!!!
nobu
頑張りますよー!
ツッコミも大歓迎です!
everes
MySQLの全文検索は、__searchを使うのが吉。
結局他のDBでは動かないけど、きちんと NotImplementedError が出るみたいです。
nobu
ありがとうございます!
そちらの方がスマートで良いですね!