まず、保存をオーバーライドして__before
を追加する代わりに および__after
メソッドでは、組み込みのpre_save
を使用できます 、post_save,
pre_delete,
およびpost_delete
信号。 https://docs.djangoproject.com/en/1.4/topics/signals/
from django.db.models.signals import post_save
class YourModel(models.Model):
pass
def after_save_your_model(sender, instance, **kwargs):
pass
# register the signal
post_save.connect(after_save_your_model, sender=YourModel, dispatch_uid=__file__)
pre_delete
およびpost_delete
delete()
を呼び出すとトリガーされます クエリセットで。
ただし、一括更新の場合は、トリガーする関数を手動で呼び出す必要があります。また、すべてをトランザクションでスローすることもできます。
動的モデルを使用している場合に適切なトリガー関数を呼び出すために、モデルのContentTypeを検査できます。例:
from django.contrib.contenttypes.models import ContentType
def view(request, app, model_name, method):
...
model = get_model(app, model_name)
content_type = ContentType.objects.get_for_model(model)
if content_type == ContenType.objects.get_for_model(YourModel):
after_save_your_model(model)
elif content_type == Contentype.objects.get_for_model(AnotherModel):
another_trigger_function(model)