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)