Pertama, alih-alih mengesampingkan simpan untuk menambahkan __before
dan __after
metode, Anda dapat menggunakan pre_save
bawaan , post_save,
pre_delete,
dan post_delete
sinyal. 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
dan post_delete
akan terpicu saat Anda memanggil delete()
pada kumpulan kueri.
Namun, untuk pembaruan massal, Anda harus memanggil fungsi yang ingin Anda picu sendiri secara manual. Dan Anda juga bisa memasukkan semuanya ke dalam transaksi.
Untuk memanggil fungsi pemicu yang tepat jika Anda menggunakan model dinamis, Anda dapat memeriksa ContentType model tersebut. Misalnya:
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)