Ten eerste, in plaats van opslaan te overschrijven om __before toe te voegen en __after methoden, kunt u de ingebouwde pre_save , post_save, pre_delete, en post_delete signalen. 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 en post_delete wordt geactiveerd wanneer u delete() aanroept op een queryset.
Voor bulkupdates moet je de functie die je wilt activeren echter handmatig aanroepen. En je kunt het ook allemaal in een transactie gooien.
Om de juiste triggerfunctie aan te roepen als u dynamische modellen gebruikt, kunt u het ContentType van het model inspecteren. Bijvoorbeeld:
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)