Първо, вместо да замените save, за да добавите __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)